6

これを機能させるために何時間も費やしました。そして、私はかなり絶望的になっています。そこに誰かが私を助けることができれば素晴らしいだろう:)

現在、Zend Framework 1.9.5 を使用していますが、これを多くのバージョンで機能させるのに苦労しています。

私がやりたいことは、XML 構成を介して独自のルートを提供し、構成で定義されていないすべてのものが最終的に errorController に到達するようにすることです。(できれば、とから離れてemできるようEXCEPTION_NO_CONTROLLEREXCEPTION_NO_ACTION

これは、デフォルトの /:module/:controller/:action および /:controller/:action ルートを取り除く必要があることを意味すると考えました。

そのため、ルーターに removeDefaultRoutes() を指示すると、これらのデフォルト ルートと一致しなくなります。しかし今、ルーターは、ルーティングされていないすべてのルートを defaultcontroller::defaultaction にルーティングしています (何??)

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

それで、URIをルーティングできないときにフロントコントローラー(またはその一部)に例外をスローさせる方法を知っている人はいますか?

これを行う理由は、コンテンツの重複を防ぎ、404 ページを改善するためです (この場合、no controller / no action エラーは、not-found ではなく、実際にはアプリケーション エラーです)。

4

2 に答える 2

5

次のような新しいルートを追加しようとしましたか

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


$router->addRoute('default', $route);

このルートは最後に処理する必要があるため、最初に追加する必要があります。

于 2009-12-01T19:51:58.167 に答える
2

1年後まで早送り... (タイムトラベルミュージック)

これは、私が考えるもう1つの方法で、「煩わしさ」がはるかに少ないと思います。デフォルトルートをキャッチするプラグインを作成できます。その場合は、例外をスローするだけで、サイクル全体の最後にフロントコントローラーによって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());
}

このようにして、プラグインを本番マシンにロードし、開発中にプラグインを除外して、クイックテストなどにデフォルトルートを使用することができます。

于 2011-07-24T17:11:02.987 に答える