0

作業する必要があるこれらのルートがあります。

/user
/user/1
/user/1.json

現在、私は持っています

        'user'              => array('key' => 'user', 'controller' => 'user'),
        'user/:id'          => array('key' => 'user-id', 'controller' => 'user', 'id' => "\d+"),
        'user/:id.json'     => array('key' => 'user-id-json', 'controller' => 'user', 'id' => "\d+"),

3 つの URL すべての最初のルートに一致します。

私はこれをやってみました:

        'user'              => array('key' => 'user', 'controller' => 'user'),
        'user/"\d+"'            => array('key' => 'user-id', 'controller' => 'user', 'id' => 1),
        'user/"\d+".json'   => array('key' => 'user-id-json', 'controller' => 'user', 'id' => 1),

ただし、最初のルートのみが一致します

Zend Route url ルールで :id を「囲む」方法はありますか?


更新しました

私のブートストラップは次を使用します:

public function _initRoutes() {
    $this->addRoutes(array(
        'client'            => array('key' => 'client', 'controller' => 'client'),
        'client/:id'        => array('key' => 'client-id', 'controller' => 'client', 'id' => "\d+"),
        'user'          => array('key' => 'user', 'controller' => 'user'),
        'user/:id'      => array('key' => 'user-id', 'controller' => 'user', 'id' => "\d+")
    ));
}

私の拡張エクステンダーは

public function addRoutes($routes) {
    $router = Zend_Controller_Front::getInstance()->getRouter();
    foreach ($routes as $pattern => $data) {
        $router->addRoute(
            $data['key'],
            new Zend_Controller_Router_Route(
                $pattern,
                array('controller' => $data['controller'])
            )
        );
    }
}

私はこれを addRoutes にしてみました:

public function addRoutes($routes) {
    $router = Zend_Controller_Front::getInstance()->getRouter();
    foreach ($routes as $pattern => $data) {
        $router->addRoute(
            $data['key'],
            new Zend_Controller_Router_Route(
                $pattern,
                array('controller' => $data['controller'])
            )
        );
        $router->addRoute(
                $data['key'].'-json',
                new Zend_Controller_Router_Route(
                        $pattern.'.json',
                        array('controller' => $data['controller'])
                )
        );

    }
}

ただし、後者はたとえば /user/50 をキャンセルします

4

1 に答える 1

0

まず、これをすべて 1 つのルートで実行しようとしないでください。同じ場所を指す名前付きルートを複数持つことができます。1 つのルートに対してこれを定義しようとしている場合、チャンクからは明確ではありません。そうであれば、ルールを 3 つに分割し、それらに同じ変数を与えます。

ルートが ini ファイル (慣例により、routes.ini) で定義されている場合、/user/:id/:format. 次に、コントローラーで Zend contextSwitcher ヘルパーを使用するか、単純に :format をアプリケーションへのヒントとして使用できます。Zend_Route がサブ文字列を探すため、ルートの reqs セクションの下に (\d+) が必要です。

それができない場合は、:id:file を使用して回避し、.json をその特定のルートの req として定義できる可能性があります。ファイル拡張子が必要な場合、これは機能する可能性があります。ただし、PHP スクリプトを json として提供することでユーザーをだますようなものであるため、Web サーバー レベルで処理する方が適切な場合があります。他のすべてが失敗し、正規表現 foo に問題がない場合は、Regex ルーターのインスタンスを作成します。これはテストされていませんが、これでうまくいくかもしれません:

/user/(\d+)\.json$
于 2012-09-20T11:16:43.963 に答える