Как получить нечетное количество параметров в Zend Framework? - PullRequest
1 голос
/ 05 февраля 2010

Приветствую всех

Используя объект request, я не могу получить единственное значение, как в этом URI:

http://mydomain.com/controller/action/value1

Использование $request->getParams() не возвращает value1.

Выход:

array([controller] => 'controller', [action] => 'action')

Ключ отсутствует.

Сама проблема довольно проста, и я мог бы сам разобрать URI, но на самом деле я хочу, чтобы ZF сделал это (верно?). Мне не удалось найти подсказку с помощью Google или SO.

Как я могу получить ключ без значения?

Ответы [ 6 ]

5 голосов
/ 05 февраля 2010

По умолчанию Zend Framework ожидает, что параметры в URL будут иметь вид /key/value. Попробуйте это:

http://mydomain.com/controller/action/key1/value1

print_r($request->getParams());

Результат:

Array
(
    [controller] => controller
    [action] => action
    [key1] => value1
)

Редактировать: как уже упоминалось, если вы хотите придерживаться http://mydomain.com/controller/action/value1, вам следует взглянуть на Zend_Controller_Router.

0 голосов
/ 05 февраля 2010

Определите свой маршрут в файле rout.ini следующим образом (если значение1 является десятичным значением, если нет, измените регулярное выражение в соответствии с вашими потребностями):

routes.your_route.route = "controller/action/:value1"
routes.your_route.defaults.controller = "controller"
routes.your_route.defaults.action = "action"
routes.your_route.reqs.value1 = "\d+"

Затем вы можете получить доступ к значению в вашем действии, используя getParam (s).

0 голосов
/ 05 февраля 2010

По умолчанию будет использоваться разбор URL в стиле rails. Так что для ваших целей вы бы хотели:

http://mydomain.com/controller/action/key1/value1

Вы можете настроить роутер так, чтобы вам не пришлось использовать часть key1. Смотрите документы:

http://framework.zend.com/manual/en/zend.controller.router.html

0 голосов
/ 05 февраля 2010

http://mydomain.com/controller/action/param/value1/

array([controller] => 'controller', [action] => 'action', [param] => 'value1');

Если вы хотите это, как в вашем примере, вы должны составить свой собственный маршрут.

0 голосов
/ 05 февраля 2010

Ну, на какой маршрут это похоже на карту? Если это маршрут по умолчанию, этого следует ожидать, поскольку он опирается на правило синтаксического анализа key/value.

Если оно не следует этому простому правилу, вам нужно создать новый маршрут, соответствующий правилу для этого конкретного URI.

В целом, если вы считаете, что у вас есть ключ, у которого не будет значения, вам необходимо указать значение по умолчанию для этого маршрута.

0 голосов
/ 05 февраля 2010

Попробуйте изменить маршруты, добавив необходимое поле.

...