如何在 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 中指定参数格式?
编辑:
也许我写了一个糟糕的问题。
我们可以为input
和output
指定解析器,如果我们没有为这些指定解析器,它会调用input
和output
的所有解析器,然后所有解析器要求 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()
{
}
格式列专为 datetime
、date
和 choice
类型设计。
对于 datetime
和 date
它表示像 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';
}
}
将被解析为:
ValidationParser
在
doParse() 方法查找在 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
属性.
验证元数据的拉取请求
你可以看到这个PR
here
我使用 @ApiDoc
注释的 input
属性 来指定作为表单字段的 api 参数。
* @ApiDoc(
* section="User",
* resource=true,
* input={
* "class"="Nik\UserBundle\Form\UserType",
* },
* ....
data_class
的形式是一个对属性进行约束验证的实体。
我希望 nelmio api 文档将参数格式指定为实体的验证约束,但格式为空。
如何在 nelmio ApiDocBundle 中指定参数格式?
编辑: 也许我写了一个糟糕的问题。
我们可以为input
和output
指定解析器,如果我们没有为这些指定解析器,它会调用input
和output
的所有解析器,然后所有解析器要求 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()
{
}
格式列专为 datetime
、date
和 choice
类型设计。
对于 datetime
和 date
它表示像 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';
}
}
将被解析为:
ValidationParser
在
doParse() 方法查找在 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
属性.
你可以看到这个PR
here