2

助けてください!私は Zend の初心者で、作業中の cms プロジェクトのデフォルト ルーティングを変更したいと考えています。

コントローラーが存在しない場合、zend で「キャッチオール」ルートを作成するにはどうすればよいですか?

次のようなリンクを作成しようとしています。

mydomain.com/slug

mydomain.com/slug1

slug と slug1 をパラメーターとして指定したデフォルト コントローラー (pagesController) に渡すことができるため、DB から適切なコンテンツを取得できます。

どんな助けにも感謝します!! :)

4

2 に答える 2

2

これを行う 1 つの方法は、リクエストが別の方法でディスパッチ可能かどうかをテストする単純なコントローラー プラグインを作成し、そうでない場合はページ コントローラー/アクションに送信することです。

<?PHP
class PageRouter extends Zend_Controller_Plugin_Abstract {

  public function preDispatch(Zend_Controller_Request_Abstract $req) {
    $dispatcher = Zend_Controller_Front::getInstance()->getDispatcher();
    if (!$dispatcher->isDispatchable($req, $req)) {

      $req->setModuleName('default');
      $req->setControllerName('page');
      $req->setActionName('page');
    }
  }

}

そして、必ずフロントコントローラーに登録してください:

Bootstrap.php :

protected function _initFrontControllerPlugins() {
    $this->bootstrap('FrontController');

    $fc = $this->getResource('FrontController');

    $pluginPageRouter = new PageRouter();
    $fc->registerPlugin($pluginPageRouter);    
}
于 2010-11-27T23:41:14.637 に答える
0

preDispatch をオーバーライドする代わりに、routeShutdown でこれを行うこともできます。これが私にとってこれを実現する唯一の方法でした。

于 2013-04-09T10:00:29.103 に答える