Сделать 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);
    }
}
Другие вопросы по тегам