私は現在、次のように定義された 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 を省略しました。私は常にコードにそれを持っていましたが、それは問題ではありません。