7

我使用注释的input属性@ApiDoc来指定我的 api 的参数,这些参数是表单的字段。

 * @ApiDoc(
 *      section="User",
 *      resource=true,
 *      input={
 *          "class"="Nik\UserBundle\Form\UserType",
 *      },
 *     ....

data_classof form 是一个对属性进行约束验证的实体。

我希望 nelmio api doc 将参数格式指定为实体的验证约束,但格式为空。

在此处输入图像描述

如何在 nelmio ApiDocBundle 中指定参数格式?


编辑:也许我写了一个不好的问题。

我们可以为input&指定解析器output,如果我们没有为这些指定解析器,它会为input&调用所有解析器output,然后调用所有解析器UserType

nelmio有一个名为ValidationParser的解析器,它有一个名为parseConstraint的方法,用于设置format输入和输出,但我的文档没有调用此方法,为什么?

4

3 回答 3

6

格式列仅适用于datetime,datechoice类型。

Fordatetimedate它代表日期格式Y-m-d H:i:s和 . 的选择数组choice

我还没有找到任何关于它的文档,所以我不得不查看源代码。这是FormTypeParser类,实际解析的地方,FormType你可以看到格式字段是如何设置的。

FormTypeParserTest类中,您可以看到如何使用它。只需format为其中一种可用类型传递带有名称的字符串参数,解析器就会处理它。

更新:FormType你要在你的班级中定义你的约束。

例如:

class TestType extends AbstractType
{
    /**
     * @Assert\Type("string")
     * @Assert\Length(min="10", max="255")
     * @Assert\Regex("/^[^<>]+$/i")
     */
    private $title;

    /**
     * @Assert\Type("string")
     * @Assert\Length(min="10", max="255")
     * @Assert\Regex("/^[^<>]+$/i")
     */
    private $content;

    /**
     * @Assert\Date()
     */
    private $created;

    public function getName()
    {
        return 'test';
    }
}

将被解析为:

在此处输入图像描述

ValidationParserdoParse()方法中查找在您的FormType类中定义的所有约束,然后parseConstraint()为每个约束执行方法。

你也可以FormTypeParser像我上面描述的那样使用。例如:

public function buildForm(FormBuilderInterface $builder, array $options)
{
    $builder->add('created', 'date', array('label' => 'Created', 'format' => 'yyyy-MM-dd'))
        ->add('color', 'choice', array('label' => 'Color', 'choices' => array('grey' => '#CCCCCC', 'red' => '#FF0000')))
        ->add('save', 'submit');
}

将被解析为:

在此处输入图像描述

希望现在有帮助!

于 2015-10-27T09:32:54.100 回答
2

我提交了一个使用属性验证元数据的拉取请求format

你可以PR 在这里看到

于 2016-02-24T12:38:52.903 回答
0

正如您在此处看到的,您可以像完成文档示例一样在注释中指定过滤器。

这里是这个例子的一部分:

/**
 * This is the documentation description of your method, it will appear
 * on a specific pane. It will read all the text until the first
 * annotation.
 *
 * @ApiDoc(
 *  resource=true,
 *  description="This is a description of your API method",
 *  filters={
 *      {"name"="a-filter", "dataType"="integer"},
 *      {"name"="another-filter", "dataType"="string", "pattern"="(foo|bar) ASC|DESC"}
 *  }
 * )
 */
public function getAction()
{
}
于 2015-10-26T09:50:25.520 回答