Zend - 基于参数编号的路由规则

时间:2012-02-21 14:15:40

标签: php zend-framework routing router zend-controller-router

在我的项目中我使用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

提前感谢您的帮助

2 个答案:

答案 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"