我正在使用 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/