【问题标题】:Confirm password field not validating using 'repeated' field using form builder in symfony2 ?使用 symfony2 中的表单生成器确认密码字段未使用“重复”字段验证?
【发布时间】:2012-03-19 21:10:54
【问题描述】:

这就是我的代码 sn-p 的样子。

// --- 这是我控制器中的代码 ----

$registrationForm = $this->createFormBuilder()
                ->add('email')
                ->add('password', 'repeated', array('type' => 'password', 'invalid_message' => 'Passwords do not match'))
                ->getForm();

        return $this->render('AcmeHelloBundle:Default:index.html.twig', array('form' => $registrationForm->createView()));

// --- This is the twig file code----

<form action="#" method="post" {{ form_enctype(form) }}>
    {{ form_errors(form) }}
    {{ form_row( form.email, { 'label': 'E-Mail:' } ) }}
    {{ form_errors( form.password ) }}
    {{ form_row( form.password.first, { 'label': 'Your password:' } ) }}     
    {{ form_row( form.password.second, { 'label': 'Repeat Password:' } ) }}     
    {{ form_rest( form ) }}
    <input type="submit" value="Register" />
</form>

谁能说明为什么它不能使用表单生成器工作?

【问题讨论】:

    标签: validation passwords symfony twig formbuilder


    【解决方案1】:

    在 Symfony 2 中,验证由域对象处理。所以你必须将一个实体(域对象)传递给你的表单。

    控制器中的代码:

    public function testAction()
    {
        $registration = new \Acme\DemoBundle\Entity\Registration();
        $registrationForm = $this->createFormBuilder($registration)
                ->add('email')
                ->add('password', 'repeated', array('type' => 'password', 'invalid_message' => 'Passwords do not match'))
                ->getForm();
    
        $request = $this->get('request');
        if ('POST' == $request->getMethod()) {
            $registrationForm->bindRequest($request);
            if ($registrationForm->isValid()) {
                return new RedirectResponse($this->generateUrl('registration_thanks'));
            }
        }
    
        return $this->render('AcmeDemoBundle:Demo:test.html.twig', array('form' => $registrationForm->createView()));
    }
    

    1) 表单构建器会将表单字段与您的实体的属性进行映射,并将您的表单字段值与您的实体属性值结合起来。

    $registrationForm = $this->createFormBuilder($registration)...
    

    2) 绑定会将您的表单字段值与所有发布的数据结合起来

    $registrationForm->bindRequest($request);
    

    3 ) 启动验证

    $registrationForm->isValid()
    

    4) 如果发布的数据有效,您必须重定向到一个操作以通知用户一切正常,以避免显示来自您的浏览器的警告消息,询问您是否确定要重新发布数据。

    return new RedirectResponse($this->generateUrl('registration_thanks'));
    

    实体代码:

    <?php
    
    namespace Acme\DemoBundle\Entity;
    
    class Registration
    {
        private $email;
    
        private $password;
    
        public function getEmail()
        {
            return $this->email;
        }
    
        public function setEmail($email)
        {
            $this->email = $email;
        }
    
        public function getPassword()
        {
            return $this->password;
        }
    
        public function setPassword($password)
        {
            $this->password = $password;
        }
    }
    

    验证文档:http://symfony.com/doc/current/book/validation.html

    注意:不需要对密码实体属性添加一些验证,repeatedType 为您完成了它

    【讨论】:

      猜你喜欢
      • 2013-12-24
      • 2015-12-11
      • 2016-01-05
      • 1970-01-01
      • 2017-06-24
      • 1970-01-01
      • 1970-01-01
      • 2018-12-13
      • 1970-01-01
      相关资源
      最近更新 更多