如何在YAML中定义自定义POST操作?

问题描述:

在我的api-platform项目中,我想创建一个自定义POST操作。虽然使用注释路由的效果很好,但我使用YAML卡住了。如何在YAML中定义自定义POST操作?

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' 

错误消息:

“水螅:描述”: “无法找到路径\控制器”/富/特殊\“,路由配置错误。”

任何想法这里有什么错?

+0

在YAML中没有自定义的POST操作。就像在ASCII或UTF-8中没有这样的操作一样。解释ASCII字符的含义,即使是组合成YAML标量也是由应用程序完成的。 – Anthon

+0

这非常有帮助。谢谢澄清! –

报价meyerbaptiste on github

如果使用ADR模式(Action类+ __invoke()方法),你必须定义你的控制器(或在这里你的行动)作为一个服务,然后使用该服务的名称作为控制器。 (即_controler: app.special_action_controller: AppBundle\Action\Special)。

也可以使用注释,请参见https://api-platform.com/docs/core/operations#creating-custom-operations-and-controllers

defaults: 
     _controller: 'AppBundle:Foo:special' 
     _api_resource_class: 'AppBundle\Entity\Foo' 
     _api_collection_operation_name: 'special' 
+0

感谢您使用此代码段,这可能会提供一些有限的即时帮助。一个[正确的解释将大大提高其长期价值](/ meta.stackexchange.com/q/114762/350567)通过显示*为什么*这是一个很好的解决方案,并会使它对未来更有用有其他类似问题的读者。请[编辑]你的答案以添加一些解释,包括你所做的假设。 – iBug

+0

有点解释会很棒。 –