0

在我的项目中,我使用 zend 来处理路由。Atm 我们的路由规则如下所示: array( 'match' => 'page', 'params' => array('page', 'idConfiguration'), 'controller' => 'controler1', 'action ' => 'action1' )

因此,我们通过以下方式访问此操作:例如http://base_url/page/1/1223324

是否有一个简单的解决方案来创建规则,以便我可以根据参数数量确定调用哪个操作?

我希望它看起来像下面这样: http://base_url/ - action 0 http://base_url/pageNumber - action 1 http://base_url/pageNumber/idConfiguration - action 2 http://base_url/pageNumber/ idConfiguration/someotherparam - 操作 3

预先感谢您的帮助

4

2 回答 2

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;
    } 
}

当然,您需要添加验证。FALSE如果 URL 不匹配并且您希望它与其他路由一起测试,您也应该返回。但这应该让您大致了解如何解决这个问题。

于 2012-02-21T15:07:50.277 回答
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"
于 2012-02-21T15:12:55.333 回答