これにより、/en/etcetcetc のような静的なプレフィックスを付ける代わりに、簡単に動的な入力変数を取得できますが、問題はすべてのコントローラーがブロックされることです。すべてがインデックス/インデックスに移動します。
質問: このルールで、現在のようにエバーティを許可するが、http://site.com/donotcatch/meとhttp://site.com/iamnotbelongstodynamic1/blablaが含まれているかどうかを追跡しないようにするにはどうすればよいですか?
protected function _initRoutes()
{
...
$dynamic1 = new Zend_Controller_Router_Route(
'/:variable0/:variable1',
array(
'controller' => 'index',
'action' => 'index'),
array(
'variable0' => '^[a-zA-Z0-9_]*$',
'variable1' => '^[a-zA-Z0-9_]*$',
)
);
ファローアップ:
通常、私は常にできると信じています。したがって、dynamic1 が他の静的コントローラーと干渉しない場合、次のように行うことができます。
// http://site/yeswecan/blabla
// variable0 = yeswecan
// variable1 = blabla
$dynamic1 = new Zend_Controller_Router_Route(
'/:variable0/:variable1',
array(
'controller' => 'index',
'action' => 'index'),
array(
'variable0' => '^[a-zA-Z]*$',
'variable1' => '^[a-z0-9_]*$',
)
);
// http://site/ajax/whatever...
// solves it
$dynamic2 = new Zend_Controller_Router_Route(
'/ajax/:variable0',
array(
'controller' => 'ajax',
'action' => ''
),
array(
'variable0' => '^[a-zA-Z0-9_]*$',
)
);
// http://site/order/whatever...
// solves it
$dynamic3 = new Zend_Controller_Router_Route(
'/order/:variable0',
array(
'controller' => 'order',
'action' => ''),
array(
'variable0' => '^[a-zA-Z0-9_]*$',
)
);
ノート:
- それでもコントローラーは失敗します。たとえば、 http://site/ajax/whateverは常に /ajax/index に移動し、/ajax/user-inserted-value として送信したかった
$dynamic1 を維持して $dynamic2 と $dynamic3 を修正するにはどうすればよいですか??