【问题标题】:zf2 routing seems to ignore __NAMESPACE__zf2 路由似乎忽略了 __NAMESPACE__
【发布时间】:2017-06-03 21:43:39
【问题描述】:

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

请求的控制器无法映射到现有的控制器类。

控制器: 用户(解析为无效的控制器类或别名:用户)

这几乎就像路由器完全忽略了 '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,但我无法在实践中使用它。示例是否错误且已过时?

【问题讨论】:

    标签: php routing namespaces zend-framework2 zend-framework-mvc


    【解决方案1】:

    要按预期工作,您必须将 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 的更多详细信息。他们在那里写道:

    此侦听器确定是否应将模块命名空间添加到控制器名称之前。如果路由匹配包含与MODULE_NAMESPACE 常量匹配的参数键,就会出现这种情况。

    【讨论】:

    • 这行得通;太感谢了。我们最初将这段代码从 Skeleton 应用程序中移出是因为我们不了解它的用途并希望绕过任何不必要的任务。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-10-28
    • 2016-09-30
    • 2016-03-16
    • 2014-02-03
    • 2012-03-11
    • 2013-09-07
    • 2016-08-12
    相关资源
    最近更新 更多