zf2 路由似乎忽略了 __NAMESPACE__
zf2 routing seems to ignore __NAMESPACE__
在 Zend Framework 2 中,我尝试使用以下路径:
'default' => array(
'type' => 'Segment',
'options' => array(
'route' => '/:username[/:action]',
'defaults' => array(
'__NAMESPACE__' => 'Website\Controller',
'controller' => 'User',
'action' => 'index',
),
),
'may_terminate' => true,
),
但是,当转到 http://www.example.com/MyUsernameHere
时,我收到 404
未找到错误:
The requested controller could not be mapped to an existing controller class.
Controller:
User(resolves to invalid controller class or alias: User)
这几乎就像路由器完全忽略 'Website\Controller'
命名空间并寻找前面没有命名空间的 User
。
所以,如果我像这样手动输入命名空间:
'default' => array(
'type' => 'Segment',
'options' => array(
'route' => '/:username[/:action]',
'defaults' => array(
'controller' => 'Website\Controller\User',
'action' => 'index',
),
),
'may_terminate' => true,
),
然后页面按预期加载。
什么给了? '__NAMESPACE__'
参数不能用于控制器吗? ZF2 网站使用 '__NAMESPACE__'
清楚地给出了 example,但我无法在实践中使用它。该示例是否错误且已过时?
要使其按预期工作,您必须将 ModuleRouteListener
附加到 MVC 事件管理器。您可以在模块 onBootstrap
方法中执行此操作:
public function onBootstrap(MvcEvent $event)
{
//...
$application = $event->getApplication();
$eventManager = $application->getEventManager();
$moduleRouteListener = new ModuleRouteListener();
$moduleRouteListener->attach($eventManager);
//...
}
完成后,您的代码将按预期工作。
他们实际上应该在您在问题中提到的例子的页面中提到这一点。您可以在模块路由侦听器 here in the Zend\Mvc documentation 上查看更多详细信息。他们在那里写道:
This listener determines if the module namespace should be prepended to the controller name. This is the case if the route match contains a parameter key matching the MODULE_NAMESPACE
constant.
在 Zend Framework 2 中,我尝试使用以下路径:
'default' => array(
'type' => 'Segment',
'options' => array(
'route' => '/:username[/:action]',
'defaults' => array(
'__NAMESPACE__' => 'Website\Controller',
'controller' => 'User',
'action' => 'index',
),
),
'may_terminate' => true,
),
但是,当转到 http://www.example.com/MyUsernameHere
时,我收到 404
未找到错误:
The requested controller could not be mapped to an existing controller class.
Controller: User(resolves to invalid controller class or alias: User)
这几乎就像路由器完全忽略 'Website\Controller'
命名空间并寻找前面没有命名空间的 User
。
所以,如果我像这样手动输入命名空间:
'default' => array(
'type' => 'Segment',
'options' => array(
'route' => '/:username[/:action]',
'defaults' => array(
'controller' => 'Website\Controller\User',
'action' => 'index',
),
),
'may_terminate' => true,
),
然后页面按预期加载。
什么给了? '__NAMESPACE__'
参数不能用于控制器吗? ZF2 网站使用 '__NAMESPACE__'
清楚地给出了 example,但我无法在实践中使用它。该示例是否错误且已过时?
要使其按预期工作,您必须将 ModuleRouteListener
附加到 MVC 事件管理器。您可以在模块 onBootstrap
方法中执行此操作:
public function onBootstrap(MvcEvent $event)
{
//...
$application = $event->getApplication();
$eventManager = $application->getEventManager();
$moduleRouteListener = new ModuleRouteListener();
$moduleRouteListener->attach($eventManager);
//...
}
完成后,您的代码将按预期工作。
他们实际上应该在您在问题中提到的例子的页面中提到这一点。您可以在模块路由侦听器 here in the Zend\Mvc documentation 上查看更多详细信息。他们在那里写道:
This listener determines if the module namespace should be prepended to the controller name. This is the case if the route match contains a parameter key matching the
MODULE_NAMESPACE
constant.