Zend Framework 2 — возникли проблемы с отображением правильного представления, всегда отображается layout / layout.phtml

#php #zend-framework2

#php #zend-framework2

Вопрос:

Я новичок в Zend Framework 2.

У меня есть несколько модулей, когда пользователь запускает приложение, я хочу отобразить модуль RecruitCore, поэтому мой единственный маршрут на данный момент — ‘route’ => ‘/’, так что это мой module.config.php для рекрутского ядра:

 return array(
    'router' => array(
        'routes' => array(
            'home' => array(
                'type' => 'ZendMvcRouterHttpLiteral',
                'options' => array(
                    'route'    => '/',
                    'defaults' => array(
                        'controller' => 'RecruitCoreControllerIndex',
                        'action'     => 'index',
                    ),
                ),
            ),
        ),
    ),
    'controllers' => array(
        'invokables' => array(
             'RecruitCoreControllerIndex' => 'RecruitCoreControllerIndexController',
        ),
    ),
   'view_manager' => array(
        'display_not_found_reason' => true,
        'display_exceptions'       => true,
        'doctype'                  => 'HTML5',
        //'not_found_template'       => 'error/404',
        //'exception_template'       => 'error/index',
        'template_path_stack' => array(
          __DIR__ . '/../view',
        ),
    ),
);
 

У меня есть IndexController в src / RecruitCore / Controller / IndexController с методом indexAction, который вызывается, потому что мои отладочные сообщения запускаются. Но вместо отображения макета view / recruit-core / index / index.phtml, он всегда отображает layout / layout.phtml . Самое смешное, что когда я удаляю view / recruit-core/index/ index.phtml, я получаю сообщение об ошибке, но, кроме этого, нет другого подтверждения view / recruit-core/index/index.phtml

так что, возможно, я что-то упускаю в module.config.php

Комментарии:

1. Ваш вопрос немного сбивает с толку. По умолчанию представления должны отображаться в макете, поэтому обычно макет всегда отображается. Ваш макет должен $this->content где-то в нем отражаться (здесь отображается представление) — есть ли у вас такая строка в вашем макете? Смотрите Макет в скелете ZF2 для примера: github.com/zendframework/ZendSkeletonApplication/blob/master /…

Ответ №1:

Zend Framework использует двухэтапную компоновку. Во-первых, для действия контроллера отображается представление. Это «внутренняя часть» полного html-документа. Затем отображается макет. Это еще один сценарий просмотра, и это «внешняя часть» html-документа.

Например, макет может выглядеть так:

 <html>
  <head>
    <title><?= $this->headTitle() ?>
  </head>

  <body>
    <div class="wrapper">
      <?= $content ?>
    </div>
  </body>
</html>
 

Сценарий просмотра может выглядеть следующим образом:

 <h1>Hello world!</h1>

<p>Lorem ipsum</p>
 

Содержимое представления вводится в $content переменную макета.

Итак, теперь немного больше информации о вашей идее. По умолчанию ZF2 отображает макет layout/layout.phtml as. Для сценариев просмотра это комбинация имени модуля верхнего уровня, имени контроллера и метода действия.

Ваш модуль вызывается RecruitCore так, что называется первый каталог recruit-core . Ваш контроллер вызывается IndexController так, что второй каталог называется index . Ваш метод indexAction таков, что, наконец, ваш сценарий просмотра разрешает recruit-code/index/index .

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