在我的symfony2项目中,我安装了FOSRestBundle和NelmioApiDocBundle,以便创建api。
对于POST路由,我有一种奇怪的行为:当我添加注释属性"input“时,Nelmio包除了生成我的表单字段之外,还会生成一个额外的参数。这个额外的参数是表单实体本身。
屏幕:

我试着调试Nelmio解析我的路由注释的那一刻:

我们可以注意到设置了parameters属性。
下面是我的post操作方法的注释:
/**
* Create a Punchline from the submitted data.
*
* @ApiDoc(
* description = "Creates a new punchline from the submitted data.",
* input = {
* "class" = "Punchline\BackendBundle\Form\Type\PunchlineType",
* "options" = {"method" = "POST"}
* },
* statusCodes = {
* 201 = "Returned when successful",
* 400 = "Returned when the form has errors"
* }
* )
*
* @param Request $request the request object
*
* @return Response
*/
public function postPunchlineAction(Request $request)这是我的FormType:
<?php
namespace Punchline\BackendBundle\Form\Type;
use Symfony\Component\Form\AbstractType;
use Symfony\Component\Form\FormBuilderInterface;
use Symfony\Component\OptionsResolver\OptionsResolverInterface;
class PunchlineType extends AbstractType
{
/**
* @param FormBuilderInterface $builder
* @param array $options
*/
public function buildForm(FormBuilderInterface $builder, array $options)
{
$builder
->add('content', 'text')
->add('author', 'author_selector')
->add('single', 'single_selector')
;
}
/**
* @param OptionsResolverInterface $resolver
*/
public function setDefaultOptions(OptionsResolverInterface $resolver)
{
$resolver->setDefaults(array(
'data_class' => 'Punchline\BackendBundle\Entity\Punchline'
));
}
/**
* @return string
*/
public function getName()
{
return 'punchline';
}
}如果设置了输入,则包将根据给定类型自动提取参数,并为每个参数确定其数据类型,以及是否需要数据类型。
我试着移除表单字段和参数残存.我没有找到设置所需参数的位置。
发布于 2015-04-16 06:35:44
从你贴出的文件来看:
表格类型特征 即使您使用FormFactoryInterface::createNamed(‘,'your_form_type'),文档也将生成表单类型名称作为输入的前缀(your_form_typeparam .而不是仅仅是param)。 可以在输入部分的名称键中指定要使用的前缀: input ={ "class“= "your_form_type","name”= "“}
尝试像这样修改@ApiDoc:
* @ApiDoc(
* description = "Creates a new punchline from the submitted data.",
* input = {
* "class" = "Punchline\BackendBundle\Form\Type\PunchlineType",
* "options" = {"method" = "POST"},
* "name" = ""
* },
* statusCodes = {
* 201 = "Returned when successful",
* 400 = "Returned when the form has errors"
* }
* )发布于 2015-04-12 12:53:57
不要将FormType作为输入,而是将类型填充的实体类。如果您仔细想想,您的API使用者不必知道数据是如何处理的,他们只关心他们提供的抽象实体。
https://stackoverflow.com/questions/29589180
复制相似问题