2009-11-25 5 views
5

私はこれを動作させるために何時間も費やしてきました。そして私はかなり絶望的になってきています。 誰かが私を助けてくれる人なら大丈夫でしょうか?Zend Framework:デフォルトルーティングを無効にするには?

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

私がしたいことは、自分自身のルートをXML設定で提供し、でないものがであることを自分の設定で定義したものが私のerrorControllerになることを確認してください。 (好ましくは方法で私EXCEPTION_NO_CONTROLLEREXCEPTION_NO_ACTIONから離れEM缶)

私はこれは私がデフォルトの/を取り除くために持っていることを意味することを考え出し:モジュール/:コントローラ/:アクションおよび/:コントローラ/:アクション路線。

ルータにデフォルトルートを削除するように指示すると、デフォルトルートとこれ以上一致しなくなります。しかし、今のルータは今defaultcontrollerにすべての未配線の経路をルーティングしている:: DEFAULTACTION(何??)

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

だから、誰もが例外をスローfrontcontroller(またはその一部)を作成する方法を知っていますURIをルーティングできない場合私はこれをしたい

理由は、重複したコンテンツを防ぎ、より良い404ページを持つことである(この場合には、何のコントローラ/アクションなしエラーがなく、実際に、見られないのアプリケーションエラーではない)

答えて

5

あなたは追加してみました

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


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

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

+0

これは私がやったことです。そのアクションでは、私は404を示す例外を投げるので、動作します。 これはまだ回避策ですが、ヘルプメイトのおかげです。 – Maurice

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()); 
} 

であなたのプラグインを読み込むことができます迅速なテストや何かのために。

+0

ありがとう、私はZFを学んでいて、あなたの例が役に立ちます。 –

+0

ありがとう、私はZF1のプラグインシステムが非常に便利で強力であることを発見しました。 ZF2を試してみませんか? – Julian

関連する問題