Несколько идентификаторов на Rest Router / Zend?

Думаю, у меня та же проблема, что и у этого парня - http://framework.zend.com/issues/browse/ZF-9385?page=com.atlassian.jira.plugin.system.issuetabpanels%3Acomment-tabpanel

"Если я вызову что-то вроде этого /mod/con/123/abc на контроллере RESTful, я ожидаю, что "123" — это мой идентификатор, а "abc" — что-то еще (вторичный/последующий идентификатор), вместо этого " 123" это ключ с "abc" в качестве значения и "id" вообще отсутствует. Идентификатор не должен затеряться здесь и дополнительные параметры... Я бы предпочел, чтобы они были просто пронумерованы Но по крайней мере обычное поведение ( /key1/value1/key2/value2) должен начинаться за параметром id."

Мне нужно извлечь идентификаторы из URL-адреса: mycontroller.com/a/getdetails/123/234/345/456.

Принимая во внимание, что Zend сохраняет вышеизложенное как:

[_params:protected] => Array
    (
        [controller] => getdetails
        [action] => get
        [format] => xml
        [123] => 234
        [345] => 456
        [module] => default
    )

Как я могу рассматривать 123, 234, 345 и 456 как идентификаторы? Или как мне извлечь их из URL?


person siliconpi    schedule 22.03.2011    source источник


Ответы (1)


Вам нужно либо создать собственные маршруты, либо изменить структуру URL-адреса (самый простой способ) на что-то вроде

mycontroller.com/a/getdetails/ids/123|234|345|456

и взорваться на вашем разделителе.

person John Cartwright    schedule 22.03.2011
comment
черт, изменение структуры URL-адреса является более стандартным подходом или настраиваемый маршрут лучше? любые указатели на то, как я могу работать на пользовательских маршрутах? Зенд для меня новый зверь... - person siliconpi; 22.03.2011
comment
Я бы, вероятно, пошел по индивидуальному маршруту, поскольку он не изменяет структуру URL-адреса и более интуитивно понятен для конечного пользователя. Возможно что-то вроде $route = new Zend_Controller_Router_Route_Regex('a/getdetails/ids/([\d|/]+)', array('controller' =› 'a', 'action' =› 'getdetails') ); $router-›addRoute('some_route_name', $route); И ваш идентификатор будет введен в объект запроса, хотя я думаю, что вам все равно нужно будет взорвать разделитель / в этом случае. - person John Cartwright; 22.03.2011