Как определить пользовательскую операцию POST в YAML?

В моем проекте api-platform я хочу создать пользовательскую операцию POST. Хотя это хорошо работает с аннотациями для маршрутизации, я застреваю, используя YAML.

Определение ресурса API

# src/AppBundle/Resources/config/api_resources/resources.yml
AppBundle\Entity\Foo:
    collectionOperations:
        get:
            method: 'GET'
        special:
            route_name: 'foo_special'

Маршрутизация

# app/config/routing.yml
foo_special:
    path: '/foo/special'
    methods:  ['POST']
    defaults:
        _api_resource_class: 'AppBundle\Entity\Foo'
        _api_collection_operation_name: 'special'

Сообщение об ошибке:

"hydra:description": "Не удалось найти контроллер для пути \"/foo/special\. Маршрут настроен неправильно."

Есть идеи, что здесь не так?


person Gottlieb Notschnabel    schedule 13.06.2017    source источник
comment
В YAML нет пользовательских операций POST. Так же как нет таких операций в ASCII или UTF-8. Интерпретация значения символов ASCII, даже объединенных в скаляры YAML, выполняется приложением.   -  person Anthon    schedule 14.06.2017
comment
Это очень полезно. Спасибо за разъяснения!   -  person Gottlieb Notschnabel    schedule 14.06.2017


Ответы (2)


Цитирование meyerbaptiste на github:

Если вы используете шаблон ADR (класс Action + метод __invoke()), вы должны определить свой контроллер (или ваше действие здесь) как службу, а затем использовать имя службы в качестве контроллера. (например, _controler: app.special_action или _controller: AppBundle\Action\Special).

Вы также можете использовать аннотации, см. https://api-platform.com/docs/core/operations#creating-custom-operations-and-controllers.

person Gottlieb Notschnabel    schedule 22.06.2017

person    schedule
comment
Спасибо за этот фрагмент кода, который может предоставить некоторую ограниченную немедленную помощь. правильное объяснение значительно улучшит его долгосрочную ценность, показав, почему это хорошее решение. к проблеме и сделает его более полезным для будущих читателей с другими подобными вопросами. Пожалуйста, отредактируйте свой ответ, чтобы добавить некоторые пояснения, включая сделанные вами предположения. - person iBug; 20.02.2018
comment
небольшое объяснение было бы здорово. - person Rahul Chandrabhan; 20.02.2018