1

ルーターの調子が悪いです。

カスタムルートがあります:

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

しかし、この URL にアクセスしようとすると、localhost/forum/topic/16 というエラーが表示されます。

致命的なエラー:「トピックが指定されていません」というメッセージを含むキャッチされない例外「Zend_Controller_Router_Exception」

しかし、ルート /forum/topic にもすべてのトピックをリストする必要があるため、トピックのデフォルト値を設定したくありません...

第 2 に、カスタム ルートを追加するとデフォルト ルーターがオーバーライドされることはわかっていますが、デフォルト ルートもいくつか必要です。私が見つけた唯一の方法は、次のように、URL ビュー ヘルパーの 2 番目のパラメーターに「デフォルト」を設定することです。

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

デフォルトの動作を使用したいすべてのURLに対してこれを行う代わりに、よりエレガントな方法はありますか?

4

1 に答える 1

1

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

url ヘルパーは、アセンブリの URL をルートにデリゲートします。2 番目のパラメーターは、ルーターからプルするルートの名前です。デフォルト ルートは「default」という名前で登録されているため、その名前を使用するのに特に問題はありません (魔法の文字列や特殊なケースではありません)。これが本当に気になる場合は、カスタム ヘルパーを作成できます ("views/helpers" の下に配置されます)。

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

そして、defaultUrl(array('action'=>'test')) ?> のようにビューで使用します。

于 2011-12-25T15:13:54.673 に答える