0

私のプロジェクトでは、ルーティングを処理するためにzendを使用しています。Atmには次のようなルーティングルールがあります:array('match' =>'page'、'params' => array('page'、'idConfiguration')、'controller' =>'controler1'、'action '=>' action1')

したがって、このアクションにアクセスするには、たとえばhttp:// base_url / page/1/1223324を使用します。

パラメータの数に基づいて呼び出されるアクションを決定できるように、ルールを作成する簡単な解決策はありますか?

次のように表示したいと思います 。http :// base_url / --action 0 http:// base_url / pageNumber --action 1 http:// base_url / pageNumber / idConfiguration --action 2 http:// base_url / pageNumber / idConfiguration/someotherparam-アクション3

よろしくお願いします

4

2 に答える 2

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"
于 2012-02-21T15:12:55.333 に答える
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;
    } 
}

もちろん、検証を追加する必要があります。FALSEまた、URL が一致せず、他のルートでテストしたい場合は、返す必要があります。しかし、これにより、これを解決する方法についての一般的なアイデアが得られるはずです。

于 2012-02-21T15:07:50.277 に答える