Ich will getBlock Adb/Block/Index in controller Adb/Controller/Category/View
. Wie geht das?
Bearbeiten
in der Steuerung.
namespace Addon\Faq\Controller\Category;
class View extends \Addon\Faq\Controller\Category
{
/**
* @var \Magento\Framework\Controller\Result\ForwardFactory
*/
protected $_coreRegistry = null;
/**
* @var \Magento\Framework\View\Result\PageFactory
*/
protected $resultPageFactory ;
/**
* @param \Magento\Backend\App\Action\Context $context
* @param \Magento\Framework\View\Result\PageFactory $resultPageFactory
*/
public function __construct(
\Magento\Framework\App\Action\Context $context,
\Magento\Framework\View\Result\PageFactory $resultPageFactory,
\Magento\Framework\Registry $registry
) {
$this->resultPageFactory = $resultPageFactory;
$this->_coreRegistry = $registry;
parent::__construct($context);
}
/**
* Product list page
*
* @return \Magento\Backend\Model\View\Result\Page
*/
public function execute()
{
$resultPage = $this->resultPageFactory ->create();
$blockInstance = $resultPage->getLayout()->getBlock('category.index');
}
}
Layout im Frontend
<page xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="../../../../../../../lib/internal/Magento/Framework/View/Layout/etc/page_configuration.xsd">
<body>
<referenceContainer name="content">
<block class="Addon\Faq\Block\Faq" name="category.index" template="Addon_Faq::view.phtml"/>
</referenceContainer>
</body>
</page>
Es heißt nicht Block Faq
magento2
magento2-dev-beta
Xanka
quelle
quelle
Antworten:
Sie geben nichts in Ihrem Ausführungsbefehl zurück. Ergebnisseite in Ihrem Controller zurückgeben
Ihr XML-Name sollte faq_category_view.xml sein.
quelle
Wenn Sie einen Block instanziieren möchten, müssen Sie eine Instanz von hinzufügen, um sie in den Konstruktor einzufügen
\Magento\Framework\View\LayoutFactory
Dann können Sie einen Block wie folgt instanziieren:
Wenn Sie auf einen im Layout definierten Block zugreifen möchten, müssen Sie den Konstruktor und die Instanz von einfügen
\Magento\Framework\View\Result\PageFactory
Dann können Sie wie folgt auf den Block zugreifen:
quelle
Erstellen Sie den Block:
Erstellen Sie eine Aktionsklasse:
quelle
$this->_view
in Controllern verwenden. Ich habe es gelesen@deprecated
. Verwenden SieresultPage->getLayout()
stattdessen wie in der anderen Antwort vorgeschlagen.Siehe den Kerncode:
Schritt 1
https://github.com/magento/magento2/blob/02e0378c33054acb0cdb8d731d1e2b2c2069bc1b/app/code/Magento/Catalog/Controller/Adminhtml/Category/Edit.php#L26-L34
Schritt 2
https://github.com/magento/magento2/blob/02e0378c33054acb0cdb8d731d1e2b2c2069bc1b/app/code/Magento/Catalog/Controller/Adminhtml/Category/Edit.php#L69-L70
Schritt 3
https://github.com/magento/magento2/blob/02e0378c33054acb0cdb8d731d1e2b2c2069bc1b/app/code/Magento/Catalog/Controller/Adminhtml/Category/Edit.php#L119
quelle