我正在使用以下格式处理Urls:“controller / action”,其中需要斜杠。
我需要创建一个PCRE正则表达式来匹配控制器和操作名称,除非控制器名称的值为“home”。例如:
<nomatch>
我一直在寻找前方,后方和周围,我有部分工作,但没有完全正确的解决方案。任何帮助表示赞赏。
**编辑
这是一个更多的背景。我想设置Zend路由以便
现在我的路线设置为:
$router->addRoute('homeRoute',
new Zend_Controller_Router_Route(
':action',
array('controller' => 'home', 'action' => 'index')
)
);
$router->addRoute('memberRoute',
new Zend_Controller_Router_Route(
'member/:action',
array('controller' => 'member', 'action' => 'index')
)
);
// and so on, a route for each non-Home controller: adminRoute, etc
这是我想要的方式,但它很难看,也是一个维护问题。我想用一条Regex路线替换所有路线'memberRoute','adminRoute'等:
$router->addRoute('siteRoute',
new Zend_Controller_Router_Route_Regex(
'????/:action',
array('action' => 'index'),
array(?? => 'controller')
)
);
我一直用一些像以下的PHP脚本运行我的正则表达式实验:
<?php
preg_match('/????/', 'home/index', $output);
echo '0=>'.$output[0].';';
echo '1=>'.$output[1].';';
?>
答案 0 :(得分:0)
我认为正则表达式不是解决方案。我之前从未使用过zend框架,但在PHP中它可能就是这样的
$string = "controller/action";
$pieces = explode('/', $string);
if ($pieces[0] == 'home') {
// special code here
} else {
// other code here
}
答案 1 :(得分:0)
当我听到“..匹配所有但某事”时,我想也许应该翻一下:如何匹配只是的东西,或者在这种情况下,'家'控制器?
// added last to be checked first
$router->addRoute(
'home',
new Zend_Controller_Router_Route(
'home/:action',
array('controller' => 'home')
)
);
答案 2 :(得分:-1)
(?:home.*)|([^/]*)(?:/(.*))?