Symfony 2:添加自定义表单元素,而不是在实体中
Posted
技术标签:
【中文标题】Symfony 2:添加自定义表单元素,而不是在实体中【英文标题】:Symfony 2 : Add a custom form element, not in an Entity 【发布时间】: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。
【问题讨论】:
【参考方案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))
【讨论】:
以上是关于Symfony 2:添加自定义表单元素,而不是在实体中的主要内容,如果未能解决你的问题,请参考以下文章
Symfony2 - 重载注册表单导致 CSRF 错误(添加 github repo)