2011-12-23 10 views
1

ルータに問題があります。Zendルーターの動作

は私がカスタムルートがあります。

$router->addRoute('showTopic', 
         new Zend_Controller_Router_Route('/forum/topic/:topic', 
             array('module' => 'forum', 
               'controller' => 'topic', 
               'action' => 'show'), 
             array('topic' => '\d+'))); 

をしかし、私はこのURLにアクセスしようとすると:

致命的なエラー:キャッチされない例外「Zend_Controller_Router_Exceptionはlocalhost /フォーラム/トピック/ 16 私はこのエラーを取得します'メッセージ付きのトピック'は指定されていません '

しかし、私はトピックのデフォルト値を入れたくありません。ルート/フォーラム/トピックですべてのトピックをリストしたいからです...

第2に、カスタムルートを追加すると、デフォルトのルーターがオーバーライドされることがわかりますが、既定のルートも必要です。私が見つけた唯一の方法は、この

$this->url(array(
       'module' => 'forum', 
       'controller' => 'topic', 
       'action' => 'add' 
       ), 'default', true) 

のように、URLビューヘルパーの2番目のパラメータで「デフォルト」を設定することで、よりエレガントな方法の代わりに、私が使用するすべてのURLのためにこれをやっありデフォルトの動作?

+0

私はより良い方法を考えることができません! – emaillenin

答えて

1

トピックのデフォルト値があり、より一般的なルート(フォーラム/トピックのもの)を追加する必要があります。 Route_Rewriteは、最後のものから始まるルートをチェックします(実際はarray_inverseを実行します)。

urlヘルパーはルートにアセンブリURLを委任し、その2番目のパラメータはルータから引き出すルートの名前です。デフォルトのルートは 'default'の名前で登録されているので、名前を使用するのに本当に面白くないものはありません(マジックストリングや特別なケースではありません)。これは本当にバグあなた場合は、カスタムヘルパー(「ビュー/ヘルパー」の下に置かれるように)書くことができます:

class Zend_View_Helper_DefaultUrl extends Zend_View_Helper_Abstract { 
    public function defaultUrl($params) { 
     return $this->view->url($params, 'default'); 
    } 
} 

をそしてdefaultUrl(配列(「アクション」=>「テスト」のようなあなたのビューでそれを使用します))?>

+0

あなたの答えをありがとう – Peekyou

関連する問題