Zend - правила маршрутизации на основе количества параметров - PullRequest
0 голосов
/ 21 февраля 2012

В моем проекте я использую 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 ]

1 голос
/ 21 февраля 2012

Решение на основе 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"
1 голос
/ 21 февраля 2012

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

...