使用choiceType进行SYMFONY 3表单验证“此值无效。”

时间:2017-12-11 20:36:53

标签: php symfony

我有两个实体Contact和Cities两个实体之间没有关系,当用户输入邮政编码时,使用脚本ajax自动填充组合框,一切都很好。

在添加到数据库时,我有此错误'此值无效。

  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));

 } 
}

2 个答案:

答案 0 :(得分:0)

检查您是否在探查器中提交了某些内容。如果值为Submitted,则尝试在没有Ajax的情况下直接对相同的值进行sublit。我认为错误来自类型,$ ville期望一个字符串,你提交一个整数

答案 1 :(得分:0)

我重现了你的代码,我找到了解决问题的方法。

您可以为VilleEntity添加一个功能:

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

在你的ContactType中你应该用这个代替ville字段:

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

您也可以插入AJAX刷新。我希望这会对你有所帮助。