2013-02-14 1 views
1

Я использую AbstractRestfulController для контроллера в своем ZF2-приложении. Этот контроллер реализует функции create(), update() и т. Д.Zend Framework 2 RestfulController с дополнительными действиями

Возможно ли иметь действия рядом с этими REST-функциями?

E.g. Я хочу иметь: url.com/model/id, чтобы получить модель (это уже работает), но я хочу иметь возможность вызвать url.com/model/doSomething.

Я попытался с помощью child_routes, но это не сработало:

'car' => array(
          'type'   => 'literal', 
          'options'  => array(
            'route'  => '/car', 
            'defaults' => array(
              'controller' => 'CarDealer\Controller\Car', 
              'action' => 'index' 
            ), 
          ), 
          'child_routes' => array(
            'rest' => array(
              'type' => 'segment', 
              'options' => array(
                'route'  => '[/:id]', 
                'constraints' => array(
                  'id' => '[0-9]+', 
                ), 
                'defaults' => array(
                  'controller' => 'CarDealer\Controller\Car', 
                ), 
              ), 
            ), 
            'actions' => array(
              'type' => 'segment', 
              'options' => array(
                'route'  => '[/:action]', 
                'constraints' => array(
                  'action' => '[a-zA-Z][a-zA-Z0-9_-]*', 
                  'id'  => '[0-9]+', 
                ), 
                'defaults' => array(
                  'controller' => 'CarDealer\Controller\Car', 
                  'action'  => 'index', 
                ), 
              ), 
            ), 
          ), 
        ), 

Я довольно уверен, что выше не делает так много смысла, но я не мог найти правильные подсказки, чтобы все заработало.

Благодарим за помощь!

+1

Это противоречит тому, как работает REST ... Вероятно, вы должны, в конечном счете, сопоставить отдельные пути (как URI ресурса) с различными действиями. Что вы можете сделать, это использовать собственные методы HTTP (глаголы), а не – Ocramius

+0

Это то, что я ожидал :) Спасибо, тогда я буду использовать разные контроллеры. – dide

ответ

4

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

+0

Ответ от легендарного Роба Аллена, спасибо: D – dide

+0

Я не понимаю, что вам нужен другой контроллер. Литературный маршрут, сопоставленный определенному действию в контроллере Restful, работает. Например, у меня есть случай использования, когда мне нужно подсчитать количество объектов ** Item **, которые у меня есть. Я создал Literal route mapping '/ api/item/count' для' countAction() ', который возвращает' {count: #} '. Это * кажется * намного лучше, чем использование полностью отдельного контроллера или использование 'getList()' и вычисление клиентской части count. Неужели *** обязательно *** «неправильно» добавлять определенные действия к контроллеру ZF2 Restful, как это? –

+1

Это не так. т.е. по определению у вас есть рабочее решение :) Однако api/item/count - это другой HTTP-ресурс из api/item, поэтому вы смешиваете набор действий HTTP, доступных в/api/item, с помощью GET on/api/action/считать в тот же контроллер. –

0

Использование WildCard Маршруты, чтобы сделать что-то, что не исключено. в контроллере получить параметры подстановки, чтобы сделать это действие

 Смежные вопросы

  • Нет связанных вопросов^_^