2016-09-23 16 views
0

私はREST Webサービス(FOSRestBundle 2.0.0、Symfony 3.1.3)を作成し、エンティティの作成をテスト中です。作成自体は正しいデータセットでうまく動作しますが、必要な値を省略しようとすると、コントローラはフォームが有効であると依然として言います。symfony 3でFosRestBundleを使用したフォーム検証の問題

エンティティ自体:

class Customer implements ExportableEntity 
{ 
    use Traits\FilterableTrait; 
    use Traits\UuidTrait; 

    /** 
    * @var int 
    * 
    * @ORM\Column(name="id", type="integer") 
    * @ORM\Id 
    * @ORM\GeneratedValue(strategy="AUTO") 
    * @Serializer\Exclude() 
    * @Serializer\ReadOnly() 
    */ 
    private $id; 

    /** 
    * @var int 
    * 
    * @ORM\Column(name="customer_index", type="integer", unique=true) 
    */ 
    private $customerIndex; 

    /** 
    * @var string 
    * 
    * @ORM\Column(name="customerName", type="string", length=255) 
    */ 
    private $customerName; 
    // [... accessors ...] 

コントローラ:

/** 
* @ApiDoc(
*  resource=false, 
*  description="Create a new customer", 
*  section="Customers", 
*  statusCode={ 
*   200="Action successful", 
*   403="Authorization required but incorrect/missing information or unsufficient rights", 
*   500="Returned if action failed for unknown reasons" 
*  } 
* ) 
* 
* @param Customer $customer 
* @return RestResponse 
*/ 
public function postCustomerAction(Request $request) { 
    $manager = $this->container->get('corebundle.managers.customer'); 
    // Internal usage only, no link with the WS issue 
    $manager->setChecksEnabled(false); 

    $customer = new Customer(); 
    $form = $this->get('form.factory')->createNamed(null, CustomerType::class, $customer, ['csrf_protection' => false]); 
    $form->handleRequest($request); 

    //if ($form->isValid()) { 
    if ($form->isSubmitted() && $form->isValid()) { 
     print('VALID'); 
     exit(); 
     $manager->create($customer); 

     // Return 201 + Location 
    } 

    return \FOS\RestBundle\View\View::create($form, 400); 
} 

とにformType:

class CustomerType extends AbstractType 
{ 
    /** 
    * @param FormBuilderInterface $builder 
    * @param array    $options 
    */ 
    public function buildForm(FormBuilderInterface $builder, array $options) 
    { 
     $builder 
      ->add('customerName', Type\TextType::class, array('label' => 'Customer name')) 
      ->add('customerIndex', Type\IntegerType::class, array('label' => 'Customer Index')) 
      ->add('comment', Type\TextareaType::class, array('label' => 'Comments', 
                  'required' => false,)) 
      ; 
    } 

    public function configureOptions(OptionsResolver $resolver) 
    { 
     $resolver->setDefaults(array('data_class' => 'NetDev\CoreBundle\Entity\Customer')); 
    } 

    /** 
    * @return string 
    */ 
    public function getBlockPrefix() 
    { 
     return 'netdev_corebundle_customer'; 
    } 
} 

私は新しい顧客を作成しようと "customerIndex" を省略した場合フィールド、私は無効なフォームエラーを取得する必要がありますが、私はそれを取得していないと信じている。

私は無駄に

$form->submit([]) 

$form->submit($request->request->get($form->getName())) 

で "のhandleRequest" を変更しようとしました。エンティティ自体に「NotBlank()」制約を追加すると機能しますが、これは修正ではなく回避策になるという印象を受けています。私は何か見落としてますか ?

答えて

0
$form->isValid() 

この行は、あなたの送信されたデータは、(例えば、@assert \ NotBlank()のために、アサートアノテーションで)あなたの実体ファイルに書かれたすべての制約を尊重していることを確認します。

あなたは何かを見逃しませんでした。

+0

確かに私は制約を扱うこの特定の方法については言いましたが、フォームを使用しても同様の結果は得られませんでしたか?フォームはどのフィールドが必須か/整数/何であるかを "知っている"ので、 "isValid()"呼び出しでこれを使用できないのはなぜですか?設計上、私の側で間違い? – NaeiKinDus

関連する問題