【发布时间】:2014-04-10 08:52:01
【问题描述】:
我遇到了 zf2 路由问题。我正在使用骨架示例 https://github.com/zendframework/ZendSkeletonApplication/blob/master/module/Application/config/module.config.php,但是当我绑定访问 http://localhost/admin/ 或 http://localhost/admin/answers 时,我收到 404 消息:
A 404 error occurred
Page not found.
The requested controller could not be mapped to an existing controller class.
Controller:
Index(resolves to invalid controller class or alias: Index)
No Exception available
从错误消息中我认为路由器忽略了 __NAMESPACE__。也许有人可以帮我找到解决问题的方法?
我使用https://github.com/zendframework/ZFTool 创建模块和控制器。 我的文件结构是:
module/Admin
├── config
│ └── module.config.php
├── Module.php
├── src
│ └── Admin
│ └── Controller
│ ├── AnswersController.php
│ └── IndexController.php
└── view
└── admin
├── answers
│ └── index.phtml
└── index
└── index.phtml
我的模块.config.php:
return array(
'controllers' => array(
'invokables' => array(
'Admin\Controller\Answers' => 'Admin\Controller\AnswersController',
'Admin\Controller\Index' => 'Admin\Controller\IndexController',
),
),
'router' => array(
'routes' => array(
'admin' => array(
'type' => 'literal',
'options' => array(
'route' => '/admin',
'defaults' => array(
'__NAMESPACE__' => 'Admin\Controller',
'controller' => 'Index',
'action' => 'index',
),
),
'may_terminate' => true,
'child_routes' => array(
'default' => array(
'type' => 'segment',
'options' => array(
'route' => '/[:controller[/:action]]',
'constraints' => array(
'controller' => '[a-zA-Z][a-zA-Z0-9_-]*',
'action' => '[a-zA-Z][a-zA-Z0-9_-]*',
),
'defaults' => array(
),
),
),
),
),
),
),
'view_manager' => array(
'template_path_stack' => array(
'admin' => __DIR__ . '/../view',
),
),
);
如果我要更改:'\__NAMESPACE__' => 'Admin\Controller', 'controller' => 'Index', 到 'controller' => 'Admin\Controller\Index' 我可以访问索引控制器,但不能访问 Answers。
其他信息:
我发现了骨架应用程序的奇怪行为。我已经下载了新的骨架应用程序并且此配置有效。如果我要去localhost/application/index 或localhost/application/answers,它可以正常工作。但是,如果我将应用程序模块名称更改为管理员并更改路由器配置(将所有应用程序替换为管理员,将应用程序替换为管理员)并且配置停止工作。谁能解释一下?也许 Application 模块在骨架应用程序中作为默认模块工作?
我正在使用 Zend Framework 2.2.4。
【问题讨论】:
-
你添加了命名空间Admin\Controller吗?在您的控制器内?如果你能命名你的文件结构,那将会很有帮助。
-
@cptnk 是 ZFTool 添加了命名空间。我已经用文件结构更新了我的问题。
-
您找到解决方案了吗?我在 2017 年仍然遇到这个问题。谢谢。
-
@HelloWorld 我没有找到原因。我们只是手动编写了每条路线。
标签: php routing namespaces zend-framework2