#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. Вы можете переопределить сценарий просмотра и имя макета, если хотите.