Сделать Zend 2 для поиска только шаблонов в том же модуле
У меня есть (упрощенный) два модуля, Application
а также Admin
, Я работал над Admin
модуль на некоторое время и начал с Application
, Оба модуля имеют контроллер с именем UsersController
,
Теперь, когда я начал делать Application
и создал несколько маршрутов и действий, мой Admin
модуль сломался. Ошибка, которую я получил при попытке открыть любую страницу администратора, была похожа на
Unable to render template "application/users/index"
Согласно документам, первая часть пути шаблона берется из пространства имен вызывающего контроллера. Но с тех пор как я создал каталог module/Application/view/application/users/
, он пытается взять все Admin\Controller\UsersController
шаблоны оттуда, без учета пространства имен.
Как я могу заставить Zend снова использовать пространство имен, не заставляя каждый раз запускать файл шаблона в действии?
(Использование Zend 2.1.3)
2 ответа
Проблема была в том, что я использовал одинаковые псевдонимы для имен контроллеров в нескольких модулях. Поэтому я изменил их имена так:
'controllers' => array(
'invokables' => array(
'AdminIndex' => 'Admin\Controller\IndexController',
),
),
Конфигурация другого модуля использовала те же имена и, таким образом, просто заменила имена из моего модуля администратора.
namespace Admin;
class Module
{
public function init($moduleManager)
{
$sharedEvents = $moduleManager->getEventManager()->getSharedManager();
$sharedEvents->attach(__NAMESPACE__, 'dispatch', function($e) {
$actionName = $e->getRouteMatch()->getParam('action');
$controller = $e->getTarget();
$controller->layout(__DIR__ . "/Application/view/application/user/$actionName");
}, 100);
}
}