2 つのカスタム ルートを定義しました。1つは forthreads/:id/:name
で、もう1つは for ですthreads/tags/:tagName
が、2番目のものは最初のものと競合します。両方を有効にすると、最初のものが壊れて:id
、要件に従わずに文字通りアクションとして扱われるため\d+
です(純粋な正規表現ルートも使用してみました。下部を参照してください)。
アクション "1" は存在せず、__call() にトラップされませんでした
ルートの順序を並べ替えてみましたが、そうすると、threads/tags/:tagName
tagName が正しくキャプチャされません。
また、デフォルト ルートを無効にしようとしましたが、その後もルートが正しく機能しません。
これが私のルート初期化関数です:
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'
)
)
);