2015-04-12 53 views
4

在我的symfony2項目中,我安裝了FOSRestBundle和NelmioApiDocBundle以創建api。NelmioApiDocBundle根據輸入註釋生成額外參數

我有一個奇怪的行爲與我的POST路由:當我添加註釋屬性「輸入」,除了我的表單域之外,Nelmio包生成一個額外的參數。這個額外的參數是表單實體本身。

屏幕:

Api web interface of the post endpoint

我試着調試時刻Nelmio分析我的路由的註釋:

nelmio debug route annotation parsing

我們可以注意到parameters屬性設置。

這是帖子的操作方法的註釋:

/** 
* 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'; 
    } 
} 

NelmioApiDocBundle documentation

如果設置輸入,然後該捆綁包根據給定的類型自動提取參數 ,並確定e ach參數其數據類型爲 ,以及是否需要。

我試圖刪除表單域和參數仍然保留...我沒有找到我設置這個必需參數的位置。

回答

-2

不要將FormType作爲輸入,而是將類型填充的實體類。如果你仔細想想,你的API消費者不需要知道數據是如何處理的,他們只關心他們提供的抽象實體。

2

從您發佈的文檔:

表單類型特點

即使你使用FormFactoryInterface :: createNamed(「」,「your_form_type」)的文件會生成表單類型名稱作爲前綴輸入(your_form_type [param] ...而不是參數)。

您可以指定在輸入部分的名稱鍵使用的前綴:

輸入= { 「類」= 「your_form_type」, 「名」= 「」}

嘗試修改您的@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" 
* } 
*) 
+0

感謝您的回答。事實上,如果我設置名稱屬性爲空值,我沒有額外的參數,但我不再有前綴...這不是我想要的:/ –