【问题标题】:Zend Framework: How to disable default routing?Zend Framework:如何禁用默认路由?
【发布时间】:2010-12-20 07:35:31
【问题描述】:

我花了很多时间试图让它发挥作用。我越来越绝望了。 如果有人可以帮助我,那就太好了:)

目前使用 Zend Framework 1.9.5,尽管我现在一直在努力让它适用于许多版本。

我想做的是通过 XML 配置提供我自己的路由,并确保在我的配置中定义的所有都将在我的 errorController 上结束。 (最好以某种方式让我可以将它们与EXCEPTION_NO_CONTROLLEREXCEPTION_NO_ACTION 分开)

我认为这意味着我必须摆脱默认的 /:module/:controller/:action 和 /:controller/:action 路由。

所以当我告诉路由器 removeDefaultRoutes() 时,它将不再匹配这些默认路由。但是现在路由器正在将 每一个 未路由的路由路由到 defaultcontroller::defaultaction(什么??)

$front->getRouter()->removeDefaultRoutes();

那么,有谁知道如何让前端控制器(或它的一部分)在 URI 无法路由时抛出异常?

我想这样做的原因是为了防止重复内容,并有更好的 404 页面(在这种情况下,没有控制器/没有操作错误实际上是应用程序错误而不是未找到)

【问题讨论】:

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


    【解决方案1】:

    您是否尝试过添加一条新路线,例如

    $route = new Zend_Controller_Router_Route('*', array('controller'=>'error', 'module'=>'default', 'action'=>'error'));
    
    
    $router->addRoute('default', $route);
    

    您需要先添加此路由,因为它需要是最后处理的。

    【讨论】:

    • 好的,这就是我所做的。它有效,因为在该操作中,我抛出了一个指示 404 的异常。它仍然是一种解决方法,但感谢您的帮助 mate
    【解决方案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());
    }
    

    通过这种方式,您可以在生产机器中加载插件,并将其留在开发中,您可能希望使用默认路由进行快速测试或其他用途。

    【讨论】:

    • 谢谢,我发现ZF1的插件系统非常好用,功能强大。还没来得及尝试 ZF2。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-11-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-10-13
    • 2010-11-28
    相关资源
    最近更新 更多