2012-02-23 18 views
0

デフォルトでは、ZF:/ module/controller/actionに次のURL構文があります。私が望むのは、私が望む任意のURLを使用できるメニューシステムを構築することです。Zend Frameworkのフルダイナミックルータ

「ニュース」というメニュー項目を作ってもいいですか?私はfolowingロードさを持つようにしたいhttp://www.site.com/newsを呼び出すとき:

  • モジュール:ニュース
  • コントローラ:フロントページ
  • アクション:表示

これらの設定値は、データベース - に設定する必要がありますメニュー項目のレコード。

どうすればこのようにすることができますか?私はそれを探し出すのに多くの時間を費やしていますが、私はまだどのようにするかを理解できません。誰か?

答えて

0

:mymodelという中

class My_CustomRouterPlugin extends Zend_Controller_Plugin_Abstract 
    { 
     public function routeStartup(Zend_Controller_Request_Abstract $request) 
     { 

      $fc = Zend_Controller_Front::getInstance(); 
      $action =$fc->getRequest()->getActionName(); 

      $router = $fc->getRouter(); 

      $model= new myModel();  
      $myPage = $model->getPageByAction($action); 

      $route = new Zend_Controller_Router_Route('/action', array(
          'module' => $myPage->getModule(); 
          'controller' => $myPage->getController(); 
          'action' => $action; 

         )); 

      $router->addRoute($action, $route); 
      return $router; 
      } 
    } 

は、メソッドを定義するには、あなたを得ることができますモジュール、コントローラ名(あなたからのDB)を含むオブジェクト(または配列)。

とブートストラップにこのプラグインを登録します。

$front->registerPlugin(new My_CustomRouterPlugin()); 
1

フロントコントローラープラグインを使用してすべてのエントリのデータベースをスキャンし、それらのエントリに基づいてルーティングルールを作成し、ルータ(see this)に追加することをお勧めします。

もちろん、すべての要求に対して大量の処理を行わないように、キャッシュ戦略をお勧めします。あなたがプラグインを作成して、をrouteStartupに/actionにあなたの要求とルート/module/controller/actionを傍受何かを定義しますが、このために、すべてのアクション名は一意である必要がありますすることができます

+0

私はちょうどのみ使用アイテムを読み込むことができませんか? –

+0

はい、できます。しかし、 'url'ビューヘルパーを使って他のページへの素敵なリンクを生成したい場合は、とにかく定義されたルートをすべて(よく、潜在的にすべて)必要とします。 – bububaba

+0

これは良いことです;-) –