2010-12-31 14 views
5

私はZend Framework newbieです。私はapplication.iniファイルに別のルートを追加する方法を工夫しています。Zend Frameworkでapplication.iniのルートを設定する

私は現在、以下のように設定私のルートを持っている:

resources.router.routes.artists.route = /artists/:stub 
resources.router.routes.artists.defaults.controller = artists 
resources.router.routes.artists.defaults.action = display 

...プロフィールをdipslayする「アーティスト」コントローラの「表示」アクションを使用しています/アーティスト/ジョー・bloggsように、問題のアーティスト - それはうまく動作します。

私が今したいのは、/artists/joe-bloggs/random-gallery-nameが「アーティスト」コントローラの「ギャラリー」アクションに移動するように別のルートを設定することです。

私はそうのような(上記ブロックの下)のapplication.iniファイルに追加のブロックを追加してみました:

resources.router.routes.artists.route = /artists/:stub/:gallery 
resources.router.routes.artists.defaults.controller = artists 
resources.router.routes.artists.defaults.action = galleries 

...しかし、私は/アーティスト/ジョー・bloggsのページがあることを行うとき、はもう動作しません(Zendは "joe-bloggs"コントローラにルーティングしようとします)。

"/:gallery"が存在するかどうかによって "アーティスト"コントローラの動作を変更できるように、application.iniにルートを設定するにはどうすればよいですか?

私はおそらく本当に愚かな間違いをしていることを実感していますので、私の愚かさを指摘してください。

答えて

4

ルートの順序を逆にしてみてください。 ZFは、追加された順番にルートを照合します(デフォルトルートが最後にマッチするように)

これでうまくいかない場合は、オプションのコンポーネントで正規表現ルートを調べる必要があります。私は通常、セットアップアプリケーション/ bootstrap.phpの中に私のルート

1

は、以下のいずれかのようメソッドを追加(またはあなたのbootstrap.phpのファイルがある場所):気象ANを確認する限り

protected function _initRoutes() 
{ 
    $ctrl = Zend_Controller_Front::getInstance(); 
    $router = $ctrl->getRouter(); 
    $router->addRoute(
      'artist_detail', 
      new Zend_Controller_Router_Route('artists/:stub', 
              array('controller' => 'artists', 
                'action' => 'display')) 
    ); 

    $router->addRoute(
      'artist_detail_gallery', 
      new Zend_Controller_Router_Route('artists/:stub/:gallery', 
              array('controller' => 'artists', 
                'action' => 'gallery')) 
    ); 



} 

特定のアーティストがギャラリーを持っています。私の例の場合、ArtistsControllerにgalleryActionメソッドがあります

404:

をスローしないと、 'stub'リクエストパラメータのギャラリーが存在するかどうかを確認します
throw new Zend_Controller_Action_Exception("Object does not exist", 404); 

またはいくつかの他のページにリダイレクト:

return $this->_helper->redirector('index', 'index'); //redirect to index action of index controller 

は、この情報がお役に立てば幸いです。

+0

、それははるかに冗長ですそれをapplication.iniに入れるよりも理解しやすくなります – jolyonruss

+1

@jolyonruss一方、私はしません –

3

あなたの第二のブロックは、別のルート名を持つ新しいブロックのためのこれに似たものに「芸術家の単語の名前を変更する必要があります:私は、ルーティングの解決策として、これを好む

resources.router.routes.artists-gal.route = /artists/:stub/:gallery 
resources.router.routes.artists-gal.defaults.controller = artists 
resources.router.routes.artists-gal.defaults.action = galleries 
関連する問題