Блок и модель - это две разные вещи. Это не дубликат.
pspahn
Раджив К. Модели и блоки Тома совершенно
разные
Ответы:
20
УСТАРЕЛО: ОТВЕТ О МАГЕНТО 2 АЛЬФА
Я хотел бы, чтобы это было так просто.
Это зависит от того, откуда вы хотите создать его экземпляр.
Если вы хотите создать экземпляр из другого блока, сделайте это так:
но тут есть подвох.
Вы должны создать защищенный член в вызываемой модели, _blockFactoryвнедрить экземпляр класса \Magento\Framework\View\Element\BlockFactoryв конструкторе и назначить его этому члену var.
@Marius $ toplink = $ this-> getLayout () -> getBlock ('top.links') -> toHtml (); использовать в magento 1 для magento 2 $ this -> _ view-> getLayout () -> getBlock (Full \ Block \ Class \ Name \ Here ') -> toHtml (); это приводит к ошибке, подобной этой. Неустранимая ошибка: вызов функции-члена toHtml () для необъекта, как я могу получить toHtml ()?
ND17
если вы находитесь в контроллере, вам не нужно ничего вводить _view. Это должно быть доступно по умолчанию, хотя я думаю, что это устарело сейчас. Я написал этот ответ 1,5 года назад
Мариус
1
@SachinS. Вы не должны использовать это больше. _viewустарела в контроллерах и скоро уйдет
Мариус
1
Могу ли я позвонить, используя Pagefactory объект, как это? $ viewPanelPageFactory = $ this-> resultPageFactory-> создать (); $ viewPanel = $ viewPanelPageFactory-> getLayout () -> getBlock ('catalog.leftnav') -> toHtml ();
Сушивам
13
Чтобы создать экземпляр блока, вы должны использовать
\Magento\Framework\View\LayoutInterfaceкласс и его createBlock()метод.
С помощью вспомогательного класса вы можете сделать это с помощью этого кода:
Ответы:
УСТАРЕЛО: ОТВЕТ О МАГЕНТО 2 АЛЬФА
Я хотел бы, чтобы это было так просто.
Это зависит от того, откуда вы хотите создать его экземпляр.
Если вы хотите создать экземпляр из другого блока, сделайте это так:
Внутри контроллера сделайте это:
Внутри модели:
но тут есть подвох.
Вы должны создать защищенный член в вызываемой модели,
_blockFactory
внедрить экземпляр класса\Magento\Framework\View\Element\BlockFactory
в конструкторе и назначить его этому члену var.Что-то вроде этого:
Для создания экземпляра блока из помощника он работает так же, как и для модели.
источник
_view
. Это должно быть доступно по умолчанию, хотя я думаю, что это устарело сейчас. Я написал этот ответ 1,5 года назад_view
устарела в контроллерах и скоро уйдетЧтобы создать экземпляр блока, вы должны использовать
\Magento\Framework\View\LayoutInterface
класс и егоcreateBlock()
метод.С помощью вспомогательного класса вы можете сделать это с помощью этого кода:
Затем позвоните
$helper->getBlock()
туда, где вам нужно.источник