2017-06-21 22 views
0

単純なフォーム定義を使ってデータをフィルタリングしようとしていますので、クラスを付けずに(getData()関数を使用する)フォームを作成し、フォームに渡されたパラメータは常に無効になります。フォームがフォームのコンテキストに属していないパラメータを検証しようとしています。シンプルなsymfonyフォームを使った奇妙な動作の制約

"almacen"フィールドでこの検証エラーが発生します。 この値は空白にしないでください。原因と

symfonyの\コンポーネント\バリ\ ConstraintViolation オブジェクト(symfonyの\コンポーネント\フォーム\フォーム)[almacen] .responsable =ヌル

を.DATA Iはcascade_validation=falseを使用してみましたしかし、うまくいきませんでした。コントローラのアクションで

Iが宣言:

public function indexAction(Request $request) 
{ 
    $informeStock = $this->createForm(new BusquedaInformeStockType()); 

    $informeStock->handleRequest($request); 
    if ($informeStock->isSubmitted() && $informeStock->isValid()) { 
     $data = $informStock->getData(); 
     // the action logic... 
    } 

    ... 
} 

Iエンティティフォームタイプ宣言、フォームにasociatedないdata_classと、単純なフォーム定義を有します。

public function buildForm(FormBuilderInterface $builder, array $options) 
{ 
    $builder 
     ->add('almacen', 'entity', array(
      'class' => 'BusetaBodegaBundle:Bodega', 
      'placeholder' => '---Seleccione---', 
      'required' => false, 
      'label' => 'Bodega', 
      'attr' => array(
       'class' => 'form-control', 
      ), 
     )) 
     ... 
     ... 
} 

public function configureOptions(OptionsResolver $resolver) 
{ 
    $resolver->setDefaults(array(
     'csrf_protection' => false, 
    )); 
} 

そして、これは実体ボデガの定義です:パラメータを空白に「責任が」残されたエンティティボデガの以前のバージョンでは

class Bodega 
{ 
    ... 

    /** 
    * @var string 
    * 
    * @ORM\Column(name="codigo", type="string", nullable=true) 
    * @Assert\NotBlank() 
    */ 
    private $codigo; 

    /** 
    * @var string 
    * 
    * @ORM\Column(name="nombre", type="string") 
    * @Assert\NotBlank() 
    */ 
    private $nombre; 

    /** 
    * @ORM\ManyToOne(targetEntity="Buseta\BodegaBundle\Entity\Tercero", inversedBy="bodega") 
    * @Assert\NotBlank() 
    */ 
    private $responsable; 

    ... 
} 

、そうデシベルthasで一部の行があります関連する「責任ある」ものがない。 しかしこれにもかかわらず、これは正しいことではありませんか?私は間違っているの?

答えて

0

あなたが検証制約とentity form fieldを持っています。

/** 
* @ORM\ManyToOne(targetEntity="Buseta\BodegaBundle\Entity\Tercero", inversedBy="bodega") 
* @Assert\NotBlank() 
*/ 
private $responsable; 

これはあなたの問題である - not blank

をアサートは等しくない 、厳密に虚偽ではないとして定義され、値が空白でないことを検証します空文字列で、nullにも等しくない

ei検証グループ(read thisthis)を追加するか、Assertを単純に削除します。また、そのような関連のために@Assert\Validを使用する方が良いです。

+0

このフィールド '$ resposable'はBodegaエンティティの一部ですが、私はこのエンティティを定義していないので、Bodegaを使用してフィルタフォームの「選択」を入力します。 – Dundivet

関連する問題