我有一个用作服务的表单,它要求服务容器作为构造函数中的第一个参数。
# in my services.yml file
acme_foo_bundle.fish.form.type:
class: Acme\FooBundle\Form\Type\FishType
arguments: [@service_container]
scope: request
两者:表单和REST API都运行良好但是当我浏览api doc(/app_dev.php/api/doc)时,它会抛出错误500.
经过调查后,我知道由于我的休息控制器中的以下行而引发的错误:
/**
* in my rest controller file (postFishAction)
* @ApiDoc(
* resource = true,
* input = "Acme\FooBundle\Form\Type\FishType",
* statusCodes = {
* 200 = "Returned when successful",
* 400 = "Returned when the form contains errors"
* }
[...]
*/
public function postFishAction(Request $request){ [...]
问题在于这一行:
input = "Acme\FooBundle\Form\Type\FishType",
它需要服务容器作为参数,我不知道如何通过@ApiDoc注释来提供它。
感谢您的帮助✌
答案 0 :(得分:2)
您应该尝试传递已注册表单类型的名称。
正如医生所说:
输入:与方法关联的输入类型(当前这支持表单类型,具有JMS序列化程序元数据的类以及具有验证组件元数据的类)对POST | PUT方法有用,可以是FQCN或作为表单类型(如果它在容器中的表单工厂中注册)。 ```
所以你应该尝试这样的事情:
/**
* @ApiDoc(
* resource = true,
* input = "acme_foo_fish_type",
* statusCodes = {
* 200 = "Returned when successful",
* 400 = "Returned when the form contains errors"
* }
[...]
*/
和您的表单类型注册:
services:
acme_foo_bundle.fish.form.type:
class: Acme\FooBundle\Form\Type\FishType
arguments: [@service_container]
scope: request
tags:
- { name: form.type, alias: acme_foo_fish_type }
且FishType
必须在acme_foo_fish_type
方法中返回getName
。