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