1

2 つのカスタム ルートを定義しました。1つは forthreads/:id/:nameで、もう1つは for ですthreads/tags/:tagNameが、2番目のものは最初のものと競合します。両方を有効にすると、最初のものが壊れて:id、要件に従わずに文字通りアクションとして扱われるため\d+です(純粋な正規表現ルートも使用してみました。下部を参照してください)。

アクション "1" は存在せず、__call() にトラップされませんでした

ルートの順序を並べ替えてみましたが、そうすると、threads/tags/:tagNametagName が正しくキャプチャされません。

また、デフォルト ルートを無効にしようとしましたが、その後もルートが正しく機能しません。

これが私のルート初期化関数です:

protected function _initRoutes() {
$fc = Zend_Controller_Front::getInstance();
$router = $fc->getRouter();



$router->addRoute(
    'threads',
    new Zend_Controller_Router_Route('threads/:id/:name',
    array(
        'controller' => 'threads',
        'action'     => 'thread',
    ),
    array(
        'id' => '\d+'
    )
    )
);


$router->addRoute(
    'threads',
    new Zend_Controller_Router_Route('threads/tags/:tagName',
    array(
        'controller' => 'threads',
        'action'     => 'tags',
    ),
    array(
        'tagName' => '[a-zA-Z]+'
    )
    )
);


}

また、純粋な正規表現ルートを使用してみましたが、失敗した可能性があります。

$router->addRoute(

    'threads',

    new Zend_Controller_Router_Route_Regex(
    'threads/(\d+)/([a-zA-Z]+)',
    array(
        'controller' => 'threads',
        'action'     => 'thread',
    ),
    array(
        1 => 'tagName',
        2 => 'name'
    )
    )
);
4

1 に答える 1

0

解決しました。

ああ、愚かな私。addRoute の最初の引数は一意の名前である必要があり、想定したようにコントローラーに直接対応していません。

d__asmoka、#zftalk の lutinvert に感謝します。できるだけ早くこれを受け入れます (最短で 2 日)。

于 2010-01-15T02:37:46.460 に答える