这允许我轻松获得动态输入变量,而不是像/ 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_]*$',
)
);
如何通过保持$ dynamic1 ??
来修复$ dynamic2和$ dynamic3答案 0 :(得分:1)
我认为Zend不支持使用“负面”匹配条件。幸运的是,正则表达式使用负向前瞻或后观:
每个例子,以下正则表达式:
(?!foo$|bar$)(?<!^foo|^bar)$
告诉正则表达式解析器排除完全foo
或bar
的匹配项。
fbar
,bfoo
和fbarf
仍然匹配。
注意:在上面的正则表达式中,[a-zA-Z0-9_]
与\w
完全相同。
答案 1 :(得分:1)
$dynamic2 = new Zend_Controller_Router_Route(
'/ajax/:action',
array(
'controller' => 'ajax'
),
array(
'action' => '^[a-zA-Z0-9_]*$',
)
);
您还可以为与您的正则表达式不匹配的其余ajax调用添加更通用的一个:
$dynamic1_and_a_half = new Zend_Controller_Router_Route(
'/ajax/:variable',
array(
'controller' => 'ajax',
'action' => 'index'
)
);
如果这不是您的意思,您是否也可以发布您的控制器,以及您想要/ ajax /任何电话的位置?