我使用input
注释的@ApiDoc
属性来指定我的api作为表单字段的参数。
* @ApiDoc(
* section="User",
* resource=true,
* input={
* "class"="Nik\UserBundle\Form\UserType",
* },
* ....
表单的 data_class
是对属性进行约束验证的实体。
我希望nelmio api doc将参数格式指定为实体的验证约束,但格式为空。
如何在nelmio ApiDocBundle中指定参数格式?
修改: 也许我写了一个糟糕的问题。
我们可以指定input
&的解析器output
,如果我们没有为这些指定解析器,它会调用input
&的所有解析器。 output
,然后为UserType
调用所有解析器。
nelmio
有一个名为ValidationParser的解析器,其名为parseConstraint的方法设置format
用于输入&输出,但是我的文档没有调用此方法,为什么?
答案 0 :(得分:5)
格式列仅适用于datetime
,date
和choice
类型。
对于datetime
和date
,它代表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';
}
}
将被解析为:
ValidationParser
in
doParse()方法查找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');
}
将被解析为:
希望现在有所帮助!
答案 1 :(得分:2)
我提交了一个使用format
属性验证元数据的拉取请求。
您可以看到此PR
here
答案 2 :(得分:0)
正如您可以看到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()
{
}