gpt4 book ai didi

php - zf2 路由似乎忽略了 __NAMESPACE__

转载 作者:可可西里 更新时间:2023-11-01 00:56:23 24 4
gpt4 key购买 nike

在 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 not found 错误:

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__' 参数不能用于 Controller 吗? ZF2 网站清楚地给出了 example使用 '__NAMESPACE__',但我无法在实践中使用它。该示例是否错误且已过时?

最佳答案

要使其按预期工作,您必须将 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.

关于php - zf2 路由似乎忽略了 __NAMESPACE__,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41737610/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com