我花了很多时间试图让它发挥作用。我变得非常绝望。 如果有人可以帮助我,那会很棒。)
目前正在使用Zend Framework 1.9.5,尽管我一直在努力让这个版本适用于许多版本。
我想要做的是通过XML配置提供我自己的路由,并确保我的配置中定义的不的所有内容都将在我的errorController上结束。
(最好以某种方式使我与EXCEPTION_NO_CONTROLLER
和EXCEPTION_NO_ACTION
)
我认为这意味着我必须摆脱默认的/:module /:controller /:action和/:controller /:action routes。
因此,当我告诉路由器删除DebaultRoutes()时,它将不再匹配这些默认路由。但是现在路由器现在将每个未路由的路由路由到defaultcontroller :: defaultaction(什么??)
$front->getRouter()->removeDefaultRoutes();
那么,任何人都知道如何在无法路由URI时使前控制器(或其中的一部分)抛出异常?
我想这样做的原因是为了防止重复内容,并且有更好的404页面(在这种情况下,没有控制器/没有操作错误实际上是应用程序错误而不是未找到)
答案 0 :(得分:5)
您是否尝试添加新路线,例如
$route = new Zend_Controller_Router_Route('*', array('controller'=>'error', 'module'=>'default', 'action'=>'error'));
$router->addRoute('default', $route);
您需要先添加此路线,因为它需要是最后一次处理。
答案 1 :(得分:2)
快到一年后的时间...... (时间旅行音乐)
这是我认为不那么“侵扰性”的另一种方式。您可以编写一个插件来捕获默认路由,当发生这种情况时,只需抛出一个异常,在整个循环结束时由前端控制器将其转换为404。
class Application_Plugin_DisableDefaultRoutes extends Zend_Controller_Plugin_Abstract
{
public function routeShutdown(Zend_Controller_Request_Abstract $request)
{
$front = Zend_Controller_Front::getInstance();
$currentRoute = $front->getRouter()->getCurrentRouteName();
if ($currentRoute == 'default') {
throw new Exception('Default route is disabled');
}
}
}
您可以在Bootstrap.php中加载插件
protected function _initPlugins()
{
$front = Zend_Controller_Front::getInstance();
$front->registerPlugin(new Application_Plugin_DisableDefaultRoutes());
}
通过这种方式,您可以在生产计算机中加载插件,并将其保留在开发中,您可能希望使用默认路由进行快速测试或其他操作。