2017-12-11 13 views
0

私は2つのエンティティを持っています連絡先と都市はユーザーが郵便番号を入力したときにコンボボックスが自動的にスクリプトajax順調です。SYMFONY 3 formType validation with choiceType "この値は無効です"

データベースに追加するときに、私はこのエラー 'この値は無効です。

class Contact 
    { 
/** 
* @var integer 
* 
* @ORM\Column(name="id", type="integer", nullable=false) 
* @ORM\Id 
* @ORM\GeneratedValue(strategy="IDENTITY") 
*/ 
private $id; 

/** 
* @var string 
* 
* @ORM\Column(name="content", type="string", length=255, nullable=false) 
*/ 
private $content; 



/** 
* @var string 
* 
* @ORM\Column(name="ville", type="string", length=255, nullable=false) 
*/ 
private $ville; 

/** 
* @var string 
* 
* @ORM\Column(name="pays", type="string", length=255, nullable=false) 
*/ 
private $pays; 

ContactType:

public function buildForm(FormBuilderInterface $builder, array $options) 
{ 
    $builder->add('content',null,array('attr'=>array('class'=>'cp','maxenght'=>5))) 
      ->add('ville',ChoiceType::class,array('attr'=>array('class'=>'ville', 
      ))) 
      ->add('pays',null,array('attr'=>array('class'=>'pays'))) 
      ->add('save',  SubmitType::class) 
    ; 



} 

VilleAction:あなたはプロファイラで何かを提出

public function villesAction(Request $request, $cp){ 


if ($request->isXmlHttpRequest()){ 
    $em = $this->getDoctrine()->getManager(); 
    $villeCodePostal = $em->getRepository('JTCUserBundle:Villes')- 
>findBy(array('villeCodePostal'=>$cp)); 

    if ($villeCodePostal){ 

     $villes = array(); 
     $pays = array(); 

     foreach ($villeCodePostal as $ville){ 

      $villes[] = $ville->getVilleNom(); 
      $pays[]=$ville->getVilleDepartement(); 

     } 
    // $ville=$villeCodePostal->getVilleNom(); 
     // $pays=$villeCodePostal->getVilleDepartement(); 

    }else{ 

     $ville=null ; 
     // $pays=null ; 
    } 

    $response = new JsonResponse(); 


     return $response->setData(array('ville'=>$villes, 'pays'=>$pays));//, 'pays'=>$pays)); 

} 
} 
+1

なぜVilleはChoiceTypeですか?このタイプにはいくつかの選択肢が必要です。(私は考える)Symfonyはフォームフィールドの値が選択肢の1つであることを確認します。それを通常のTextTypeフィールドに変更できませんか? –

+0

はい、私はあなたがいくつかの選択肢が必要と思う、多分いくつかのダミーデータを試して、あなたのjsonの応答と置き換えますか? –

+0

こんにちは、私はあなたの答えに感謝します。 例:郵便番号を入力すると、この郵便番号にいくつかの都市が表示されるため、ChoiceTypeの都市フィールドを入力する必要があります。 –

答えて

0

チェック。値がSubmittedの場合、Ajaxを使わずに直接同じ値をサブライトしてみてください。私はエラーが型から来ていると思う、$ villeは文字列を期待して整数を送信する

0

私はあなたのコードを再現し、あなたの問題を解決しました。

あなたのVilleEntityに機能を追加することができます。

public function __toString(){ 
     return $this->name; 
} 

そして、あなたのContactTypeにあなたは、このことにより、ヴィルフィールドを置き換える必要があります。

 ->add('ville', EntityType::class, array(
      'class'=>'AppBundle\Entity\Ville', 
      'choice_label'=>'name', 
      'label'=>'Ville', 
      'multiple'=>false 
     )) 

また、あなたのAJAXのリフレッシュをプラグインすることができます。これがあなたに役立つことを願っています。

+0

こんにちは、あなたの答えをありがとう。はい、それは動作しますが、入力された郵便番号を持つ都市をフィルタリングしません、私は選択肢のすべての都市を持っています! –

+0

フォームを動的に更新する場合は、コードにFormEventをいくつか追加する必要があります。あなたは[こちら](http://symfony.com/doc/3.4/form/dynamic_form_modification.html#dynamic-generation-for-submitted-forms)のドキュメンテーションを持っています。より多くの詳細やヘルプが必要な場合は、私はあなたを助けることができます。 –

関連する問題