Стабильная версия Magento2 - Макет рендеринга не работает в пользовательском модуле


Мой модуль отлично работал в бета-версии Magento2. В стабильной версии модуль отображается в списке, а серверная часть пользовательского модуля работает нормально. Однако интерфейсные страницы моего модуля не работают. Вот мой код.

Регулятор индекса

namespace Companyname\Modulename\Controller\Index;

use Magento\Framework\App\Action\Action;

class Index extends Action {
    public function execute() { 
        $this->_view->loadLayout();
        $this->_view->renderLayout();   
    }

}

Планировка - /app/code/Companyname/Modulename/view/frontend/layout/modulename_index_index.xml

<?xml version="1.0"?>
<page xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:framework:View/Layout/etc/page_configuration.xsd">
    <body>
    <referenceContainer name="content">
        <block class="Companyname\Modulename\Block\Modulename" name="modulename" template="Companyname_Modulename::modulename.phtml" />
    </referenceContainer>        
    </body>
</page>

Файл блокировки

namespace Companyname\Modulename\Block;
class Modulename extends \Magento\Framework\View\Element\Template {
   public function __construct(
       \Magento\Framework\View\Element\Template\Context $context, 
        array $data = array()
    ) {     
        parent::__construct($context, $data);
   }    
}

Когда я отлаживаю, он не входит конструкция блока. Я предполагаю, что он не в состоянии найти блок. Файл phtml просто печатает echo "hello world";, но на интерфейсе ничего не отображается. Есть идеи относительно того, что я делаю не так?

Author: Alex Paliarush, 2015-11-24

3 answers

Я думаю, что проблема в вашем файле modulename_index_index.xml, вы должны упомянуть макет страницы, такой как layout="1column".

Вы можете изменить макет страницы

  • 1 столбец
  • 2колонны-слева
  • 2колонны-справа
  • 3колонны
 2
Author: Keyur Shah, 2015-11-24 11:38:13

Вам необходимо указать макет страницы.
Поэтому добавьте этот layout="2columns-left" в узел <page> в hello_index_index.xml.
Вы также можете использовать 1column, 2columns-right, 3columns или empty.

 2
Author: Suresh Chikani, 2015-11-24 11:54:28

Пожалуйста, убедитесь, что ваш контроллер выполнен, если не проверять маршруты.

Кроме того, макетом не предполагается управлять напрямую с помощью объекта view в контроллере (как это было в Magento 1), вместо этого следует создать объект страницы результатов.

Пожалуйста, подумайте о том, чтобы переписать свой контроллер следующим образом:

<?php
namespace CompanyName\ModuleName\Controller\Index;

use Magento\Framework\View\Result\PageFactory;
use Magento\Framework\App\Action\Context;

class Index extends \Magento\Framework\App\Action\Action
{
    /**
     * @var PageFactory
     */
    protected $resultPageFactory;

    /**
     * @param Context $context
     * @param PageFactory $resultPageFactory
     */
    public function __construct(
        Context $context,
        PageFactory $resultPageFactory
    ) {
        $this->resultPageFactory = $resultPageFactory;
        parent::__construct($context);
    }

    /**
     * Some action.
     *
     * @return \Magento\Framework\View\Result\Page
     */
    public function execute()
    {
        /** @var \Magento\Framework\View\Result\Page $resultPage */
        $resultPage = $this->resultPageFactory->create();
        return $resultPage;
    }
}
 0
Author: Alex Paliarush, 2016-07-19 04:38:57