无法在ZF2中使用模块进行路由

时间:2012-10-13 13:16:28

标签: php zend-framework2 zend-framework-modules zend-framework-routing

我已经创建了一个模块,这是ZF2文档中给出的相册示例的基本副本,但是,对于新模块,我根本无法访问它 - 我总是给出404错误。我在ZF2骨架上构建它。

我已经加载了三个模块:应用程序,前端和安全性。

前端和安全性都是相互重复的,但是,我已经彻底检查过,并且没有引用旧代码(因为我实际上复制了模块文件夹并重命名/重写了引用)。

该模块也在application.config.php中加载。

关于我失踪的想法?

模块配置:

return array(
            'controllers' => array(
                    'invokables' => array(
                            'Security\Controller\Security' => 'Security\Controller\SecurityController',
                    ),
            ),

            'router' => array(
                    'routes' => array(
                            'security' => array(
                                    'type'    => 'segment',
                                    'options' => array(
                                            'route'    => '/security[/:action][/:id]',
                                            'constraints' => array(
                                                    'action' => '[a-zA-Z][a-zA-Z0-9_-]*',
                                                    'id'     => '[0-9]+',
                                            ),
                                            'defaults' => array(
                                                    'controller' => 'Security\Controller\Security',
                                                    'action'     => 'index',
                                            ),
                                    ),
                            ),
                    ),
            ),

            'view_manager' => array(
                    'template_path_stack' => array(
                            'security' => __DIR__ . '/../view',
                    ),
            ),
);

4 个答案:

答案 0 :(得分:2)

需要确保的事情很少: -

您必须在

中添加模块
  • application.config.php(你说你做完了。)
  • Security \ Controller \ Security默认情况下也必须相同(您已经拥有)
  • 还有一件事就是你的文件夹结构.... -

刚刚doulbe检查你有/ MODULE / src / MODULE /Controller/CONTROLLER_FILE_NAME.php

我希望有帮助..

答案 1 :(得分:2)

在遵循骨架应用程序教程(Getting started: A skeleton application)时遇到了同样的问题。每当我在浏览器中访问相册网址(在我的情况下为ZendSkeletonApplication/public/album)时,我会得到一个404错误页面,但没有详细说明为什么我得到404.我不清楚我将如何能够确定为什么在我检查了所有内容时我得到了404,并且非常确定我正确复制并配置了相册模块。事实证明我在路线中缺少斜线(module.config.php)。例如,我有'route' => 'album[/:action][/:id]'而不是'route' => '/album[/:action][/:id]'

我只能通过在invokables值中拼写错误,例如在'Album\Controller\Albums'而不是'Album\Controller\Album'中错误地导致错误来解决这个错误,这会导致显示堆栈跟踪然后显示在请求中调用的ZF2类。我将继续拼错,测试,然后更正module.config.php的每个部分,直到我得到一个线索,知道配置的哪个部分导致错误。

我很确定这不是调试应用程序配置的最佳方法。

答案 2 :(得分:0)

我知道这是一个老帖子。然而,确保你在模块顶层目录(与Module.php文件相同的目录)中的另一件事是“autoload_classmap.php” 文件中包含“<?php return array();?>”。

答案 3 :(得分:0)

一个简单的提示,知道您的规则是否已经正确添加到路由,您可以检查任何工作模块内的配置文件中的路由值,如下所示:

 $config         = $this->serviceLocator->get('config');
 var_dump($config);