0

私は現在、次のように定義された Zend Framework ルートを持っています。

$route = new Zend_Controller_Router_Route('brand/:brand_name/series/:page',
                                                array('controller' => 'brand',
                                                    'action' => 'series',
                                                    'page'=>'1'));
$router->addRoute('Brand Series', $route);

ページパラメーターが数字のみをキャッチするようにこのルートを適応させようとしています。これにより、2 つの競合することなく同じ場所で単語を使用する別のルートを追加できます。

brand/:brand_name/series/:series_name/:page

ZF のドキュメントにある例に沿って進めてみようと思いまし。最初のステップは、ルートを次のように変更することです。

$route = new Zend_Controller_Router_Route_Regex('brand/:brand_name/series/(\d+)',
                                                array('controller' => 'brand',
                                                    'action' => 'series'));

しかし、この小さな変更により、以前は完全に一致していたルートが/brand/johnnycupcakes/series/2失敗するようになり、教えてくれましたAction "johnnycupcakes" does not exist and was not trapped in __call(). そして、スタックトレースに次のように表示されます:

'controller' => 'brand',
'action' => 'johnnycupcakes',
'series' => '2',
'module' => 'default'

実際、最初の例とまったく同じルート パラメータとデフォルト パラメータをそのままにして、クラスを Router_Route_Regex に変更しただけでも、同じエラーが発生します。

競合するルートを追加していないため、エラーがルーティングの競合ではないことはわかっています。さらに、標準ルートに合わせようとしているようです。バージョン 1.11 でこれをテストしているので、私のバージョンは例のコードと完全に互換性があるはずです。

私が知る限り、正規表現ルートは非常に明確に適合しているにもかかわらず、単純に一致していません。なぜこれが失敗する可能性があるのでしょうか?

編集: 初めて質問から addRoute を省略しました。私は常にコードにそれを持っていましたが、それは問題ではありません。

4

1 に答える 1

0

必要なのは、3 番目の引数を に追加して、キャプチャされた数値パラメーターに名前を付けることですZend_Controller_Router_Route_Regex

$route = new Zend_Controller_Router_Route_Regex(
    'brand/:brand_name/series/(\d+)',
    array(
        'controller' => 'brand',
        'action' => 'series'
    ),
    array(
        1 => 'series', // name the parameter captured by (\d+)
    )
);

2 番目の配列はキーと値が反対の関係にある場合がありますが、'series' => 1それでも機能します。正規表現ルートの ZF マニュアルで詳細を確認してください

于 2013-09-17T20:50:59.200 に答える