NelmioApiDocBundle如何将参数传递给@ApiDoc(输入)注释中的表单类型classe?

时间:2014-10-06 16:18:16

标签: symfony fosuserbundle

我有一个用作服务的表单,它要求服务容器作为构造函数中的第一个参数。

# 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注释来提供它。

感谢您的帮助✌

1 个答案:

答案 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