【问题标题】:Symfony 2 : Add a custom form element, not in an EntitySymfony 2:添加自定义表单元素,而不是在实体中
【发布时间】:2012-06-12 14:14:03
【问题描述】:

我使用 Symfony2,我想创建一个注册表单。 我不想使用 FOSUserBundle。

所以,我创建了一个实体帐户(包含字段:用户名、密码、电子邮件...)并创建了表单:

 $account = new Account();

$form = $this->createFormBuilder($account)
  ->add('username',         'text', array('label' => 'Nom de compte :'))
  ->add('password',    'password', array('label' => 'Mot de passe :'))
  ->add('email',            'email', array('label' => 'Adresse email :'))
  ->getForm();

现在,我想为密码添加一个确认字段。 但是,当我尝试使用 add() 方法添加字段时,例如“password_confirmation” 我有这个:

“App\FrontBundle\Entity\Account”类中不存在属性“password_confirmation”、方法“getPasswordConfirmation()”和方法“isPasswordConfirmation()”

如何添加自定义字段?之后,如何验证它?

谢谢。 BR。

【问题讨论】:

    标签: symfony symfony-forms


    【解决方案1】:

    在正常情况下,您需要使用 property_path 选项明确指定 *password_confirmation* 不是实体的一部分。

    ->add('password_confirmation', 'password', array('property_path' => false))
    

    然后使用CallBackValidator 进行验证。

    但是,在这种特定情况下,您想要重复一个字段,repeated 小部件可以为您完成。

    ->add('password_confirmation', 'repeated', array(
        // See the docs :)
    ));
    

    【讨论】:

    • 这在 Symfony 2.1 中不再有效。您应该使用 'mapped' => false 代替,例如:->add('password_confirmation', 'password', array('mapped' => false));
    【解决方案2】:

    Symfony 2.1 的更新:

    property_path 已被弃用,您应该改用mapped。语法保持不变:

    ->add('password_confirmation', 'password', array('mapped' => false))
    

    【讨论】:

      猜你喜欢
      • 2012-09-07
      • 2013-11-23
      • 2016-08-26
      • 1970-01-01
      • 2014-04-09
      • 2016-08-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多