如何在 Nelmio ApiDocBundle 中指定参数的格式

How specify parameter's format in Nelmio ApiDocBundle

我使用 @ApiDoc 注释的 input 属性 来指定作为表单字段的 api 参数。

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

data_class 的形式是一个对属性进行约束验证的实体。

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

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


编辑: 也许我写了一个糟糕的问题。

我们可以为inputoutput指定解析器,如果我们没有为这些指定解析器,它会调用inputoutput的所有解析器,然后所有解析器要求 UserType.

nelmio 有一个名为 ValidationParser that have a method named parseConstraint 的解析器,它为输入和输出设置了 format,但是我的文档没有调用这个方法,为什么?

如您所见here您可以像在文档示例中那样在注释中指定过滤器。

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

/**
 * 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()
{
}

格式列专为 datetimedatechoice 类型设计。

对于 datetimedate 它表示像 Y-m-d H:i:s 这样的日期格式和 choice.

的选择数组

我还没有找到任何关于它的文档,所以我不得不查看源代码。这是FormTypeParserclass,真正解析FormType的地方,可以看到格式字段是怎么设置的。

FormTypeParserTestclass中可以看到使用方法。只需为可用类型之一传递带有 format 名称的字符串参数,解析器就会处理它。

更新: 您要在 FormType class.

中定义约束

例如:

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 class 中定义的所有约束,然后对每个约束执行 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');
}

将被解析为:

希望现在对您有所帮助!

我提交了一个使用 format 属性.

验证元数据的拉取请求

你可以看到这个PRhere