2012-02-21 3 views
0

私はzendを使ってルーティングを処理しています。 Atmは次のようなルーティングルールを持っています: array( 'match' => 'page'、 'params' =>配列( 'page'、 'idConfiguration')、 'controller' => 'controler1 '、 ' action '=>' action1 '私のプロジェクトでは、パラメータ番号に基づいたZendルーティングルール

このアクションには、たとえばhttp://base_url/page/1/1223324が表示されます。

ルールを作成する簡単なソリューションがありますので、どのアクションがパラメータの数に基づいて呼び出されるかを判断できますか?

私はそれが次のようになりたいのですが: http://base_url/ - アクション0 http://base_url/pageNumberを - アクション1 http://base_url/pageNumber/idConfiguration - アクション2 http://base_url/pageNumber/idConfiguration/someotherparam - アクション3

が助け

答えて

1

iniファイルベースのソリューション(私はあなたが望むものを理解してほしい):

routes.action0.route = "/:pageNumber" 
routes.action0.defaults.controller = "controller0" 
routes.action0.defaults.action = "action0" 
routes.action0.reqs.pageNumber = "\d+" 

routes.action1.route = "/:pageNumber/:idConfiguration" 
routes.action1.defaults.controller = "controller1" 
routes.action1.defaults.action = "action1" 
routes.action1.reqs.pageNumber = "\d+" 
routes.action1.reqs.idConfiguration= "\d+" 

routes.action2.route = "/:pageNumber/:idConfiguration/:someOtherParam" 
routes.action2.defaults.controller = "controller2" 
routes.action2.defaults.action = "action2" 
routes.action2.reqs.pageNumber = "\d+" 
routes.action2.reqs.idConfiguration= "\d+" 
routes.action2.reqs.someOtherParam = "someOtherRegEx" 
1

のために、事前にあなたをありがとうZend_Controller_Router_Routeをサブクラス化し、好きなルーティング動作を作成できます。あなたはもちろん、検証を追加する必要があります

class MyRoute extends Zend_Controller_Router_Route 
{ 
    public function match($path) 
    { 
     $result = array(
      'controller' => 'index', 
      'action' => substr_count($path, '/'), 
     ); 

     return $result; 
    } 
} 

:私の頭の上の、そしてそれをテストすることなく、あなたはこのような何かを試すことができます。また、URLが一致しておらず、他のルートでもテストしたい場合は、FALSEを返す必要があります。しかし、これはどのようにこれを行うには一般的なアイデアを与える必要があります。

関連する問題