php - Zend 框架 : Removing default routes

标签 php zend-framework url-routing front-controller

我正在使用 Zend FW 1.9.2,想禁用默认路由并提供我自己的路由。我真的不喜欢默认的/:controller/:action 路由。

这个想法是在初始化时注入(inject)路由,当请求不能路由到注入(inject)的路由之一时,它应该被转发到错误 Controller 。 (通过使用默认注册的 Zend_Controller_Plugin_ErrorHandler)

一切正常,直到我使用 $router->removeDefaultRoutes(); 禁用了默认路由; 当我这样做时,错误 Controller 不再将未路由的请求路由到错误 Controller 。相反,它将所有未路由的请求路由到默认 Controller 上的 indexAction。

有谁知道如何禁用默认的/:controller/:action 路由但保留路由错误处理?

基本上,这就是我所做的:

$frontController = Zend_Controller_Front::getInstance();
$router = $frontController->getRouter();
$router->removeDefaultRoutes(); // <-- when commented, errorhandling works as expected

$route = new Zend_Controller_Router_Route_Static(
    '',
    array('controller' => 'content', 'action' => 'home')
);
$router->addRoute('home', $route);

最佳答案

删除默认路由时的问题是 Zend 不再理解 urls/:module/:controller/:action,因此无论何时发送路由,它都会路由到默认模块、索引 Controller 、索引操作。

Error 插件在 Controller 调度的 postDispath 方法上工作,它之所以起作用,是因为在标准路由器中,如果找不到 Controller 、模块或操作,它会抛出错误。

要在此配置中启用自定义路由,您必须编写一个适用于 preDispatch 的新插件,并检查路由是否正确,然后在它是无效 URL 的情况下重定向到错误插件。

关于php - Zend 框架 : Removing default routes,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1421334/

相关文章:

http - 可以根据 URL 路径解析 DNS

php - CodeIgniter:插入带有事件记录的数组时出现错误

php - 模型事件没有触发

php - 我们应该在应用程序中的什么地方存储确认/错误消息?

php - 如何在本地主机和实时服务器上获得相同的 $_SERVER ['REQUEST_URI' ]

asp.net-mvc - MVC 处理嵌套操作方法?

php - 使用具有命名空间的 Unirest php 库

MySQL 中的 Javascript 数组

zend-framework - 在 Zend Framework 2 RBAC 或 ACL 中。推荐哪个?

php - 在 magento 后端翻译自定义模块管理面板