在我的项目中我使用zend来处理路由。我们有路由规则,如下所示: 阵列( 'match'=> '页', 'params'=> array('page','idConfiguration'), 'controller'=> 'controler1', 'action'=> “动作1” )
因此我们通过以下方式访问此操作:http://base_url/page/1/1223324。
是否有一个简单的解决方案来创建规则,以便我可以根据参数的数量确定调用哪个动作?
我希望它看起来如下: http://base_url/ - 行动0 http://base_url/pageNumber - 行动1 http://base_url/pageNumber/idConfiguration - 行动2 http://base_url/pageNumber/idConfiguration/someotherparam - 行动3
提前感谢您的帮助
答案 0 :(得分:1)
您可以继承Zend_Controller_Router_Route并创建您喜欢的路由行为。在我的头脑中,没有测试它你可以尝试这样的事情:
class MyRoute extends Zend_Controller_Router_Route
{
public function match($path)
{
$result = array(
'controller' => 'index',
'action' => substr_count($path, '/'),
);
return $result;
}
}
当然,您需要添加验证。如果URL不匹配,您还应该返回FALSE
,并且您希望使用其他路由对其进行测试。但是这应该让你对如何解决这个问题有一个大概的了解。
答案 1 :(得分:1)
基于Ini的解决方案(希望我明白你想要的):
routes.action0.route = "/:pageNumber"
routes.action0.defaults.controller = "controller0"
routes.action0.defaults.action = "action0"
routes.action0.reqs.pageNumber = "\d+"
routes.action1.route = "/:pageNumber/:idConfiguration"
routes.action1.defaults.controller = "controller1"
routes.action1.defaults.action = "action1"
routes.action1.reqs.pageNumber = "\d+"
routes.action1.reqs.idConfiguration= "\d+"
routes.action2.route = "/:pageNumber/:idConfiguration/:someOtherParam"
routes.action2.defaults.controller = "controller2"
routes.action2.defaults.action = "action2"
routes.action2.reqs.pageNumber = "\d+"
routes.action2.reqs.idConfiguration= "\d+"
routes.action2.reqs.someOtherParam = "someOtherRegEx"