我有(简化)两个模块,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)
这里的问题是我在多个模块中为控制器名称使用了相同的别名。所以我把它们的名字改成这样:
'controllers' => array(
'invokables' => array(
'AdminIndex' => 'Admin'Controller'IndexController',
),
),
其他模块配置使用了相同的名称,因此只是覆盖了我的Admin模块中的名称。
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);
}
}