【问题标题】:symfony validation form doesn't callsymfony 验证表单不调用
【发布时间】:2013-07-15 22:14:12
【问题描述】:

我正在使用 symfony2 制作一个网站,但我在表单验证方面遇到了一些问题。我的表单上的方法“isValid()”似乎从未被调用过:

这是我的表单创建:

公共函数createAction(请求$request) { $pro = 新职业(); $created=false;

    $form = $this->createFormBuilder($pro)
            ->add("raison_sociale",null,array("label"=>"Raison sociale * : "))
            ->add("siret",null,array("label"=>"N° SIREN * : "))
            ->add("nom",null,array("label"=>"Nom *: "))
            ->add("prenom",null,array(
                "label"=>"Prénom *: "
                ))
            ->add("adresse",null,array(
                "required"=>false,
                "label"=>"Adresse : "
                ))
            ->add("code_postal","text",array(
                "required"=>false,
                "label"=> "Code Postal : "
                ))
            ->add("ville",null,array(
                "required"=>false,
                "label"=> "Ville : "
                ))
            ->add("tel",null,array("label"=>"Téléphone * : ","required"=>true))
            ->add("mobile",null,array(
                "required"=>false,
                "label"=>"Mobile : "
                ))
            ->add("fax",null,array(
                "required"=>false,
                "label"=>"Fax : "
                ))
            ->add("email","email",array("label"=>"Email * : "))
            ->add("username",null,array("label"=>"Login * : "))
            ->add("password","password",array("label"=>"Mot de passe * : "))
            ->add("newsletter",null,array("required"=>false,"label"=>"Je souhaite m'inscrire à la newsletter"))
            ->add("accept","checkbox",array("label"=>" "))
            ->getForm()
    ;

    if ($request->isMethod("POST"))
    {
        $form->bind($request);
        if ($form->isValid())
        {
            $em=$this->getDoctrine()->getEntityManager();
            $pro=$form->getData();
            $encoder = $this->get('security.encoder_factory')->getEncoder($pro);
            $pro->setPassword($encoder->encodePassword($pro->getPassword(),$pro->getSalt()));
            $em->persist($pro);
            $em->flush();
            $created=true;
            $this->get("session")->getFlashBag()->add("success", "Votre compte a bien été créé. Vous avez reçu un mail confirmant votre inscritpion.");
        }
    }

    return $this->render('OverscanProfessionnelBundle:Front:create.html.twig',array('form'=>$form->createView(),'created'=>$created));
}

这是我的validatio.yml:

webapp\ProfessionnelBundle\Entity\Professionnel:
    constraints:
        Symfony\Bridge\Doctrine\Validator\Constraints\UniqueEntity: 
            fields: email
            message: "L'email est déjà pris"

        Symfony\Bridge\Doctrine\Validator\Constraints\UniqueEntity:
            fields: username
            message: "Ce login est déjà pris"
    properties:
        raison_sociale:
             - Valid: 
        siret:
            - Length:
                min : 9
                max : 9
                minMessage: "Le SIREN doit contenir 9 caractères"
                maxMessage: "Le SIREN doit contenir 9 caractères" 
            - Regex:
                pattern: "/\d/"
                match: true
                message: "Le SIREN ne doit pas contenir de lettre"
        tel:
            - Length:
                min : 10
                max : 10
                minMessage: "Le numéro de téléphone doit contenir 10 chiffres"
                maxMessage: "Le numéro de téléphone doit contenir 10 chiffres"

所以当我发布我的表单时,不会调用验证,但会调用约束! 有人能帮助我吗 ?

【问题讨论】:

  • no validation are called but constraints 是什么意思?请解释一下...
  • 在我的验证中,我对唯一用户邮件有限制。如果我尝试使用相同的电子邮件地址添加新记录,我会收到此通知消息:“Ce login est déjà pris”由此约束引发:Symfony\Bridge\Doctrine\Validator\Constraints\UniqueEntity:字段:用户名消息:“Ce登录 est déjà pris"
  • 是的,我可以看到...但是什么不起作用?
  • 例如,如果我在字段siret中输入6个字符,记录将被保存,但我在此字段上有一个属性,只有当它有9个字符时才保存它
  • 如果您手动使用验证器,属性是否也未验证? $validator = $this->get('validator'); $errors = $validator->validate($entity); ... 你的 validation.yml 到底保存在哪里?

标签: validation symfony


【解决方案1】:

看看你的“app/../config.yml
你应该看到这样的东西:

framework:
 ...
   validation: { enable_annotations: true }

设置为:

framework:
 ...
   validation: { enabled: true, enable_annotations: true }

然后,你的 validation.yml 应该被加载了!

【讨论】:

  • 这对我有用 :) 我有同样的问题,现在解决了!谢谢。
  • 我不知道为什么我在“框架”下没有“验证”条目,但添加它只是节省了我的一天。感谢您指出这一点
【解决方案2】:

尝试像这样将数据类添加到您的表单中:

$this->createFormBuilder($entity, array(
        'data_class' => '\Vendor\YourBundle\Entity\MyEntity',
    )
)
// -> add() 

【讨论】:

    猜你喜欢
    • 2017-02-27
    • 2015-01-23
    • 1970-01-01
    • 1970-01-01
    • 2019-01-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多