Zend - правила маршрутизации на основе количества параметров

В моем проекте я использую Zend для обработки маршрутизации. У нас есть правила маршрутизации, которые выглядят так: массив ( 'match' => 'page', 'params' => массив ('page', 'idConfiguration'), 'controller' => 'controler1', 'action' => 'action1')

Таким образом, мы получаем доступ к этому действию, например: 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 ответа

Решение

Решение на основе 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"

Вы можете создать подкласс 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 не совпадает, и вы хотите, чтобы он был проверен с другими маршрутами. Но это должно дать вам общее представление о том, как это решить.

Другие вопросы по тегам