symfony2覆盖模型验证

时间:2012-03-29 12:23:42

标签: symfony fosuserbundle

我正在使用FOS用户包,我想覆盖验证文件FOS / UserBundle / Resources / config / validaiton.xml:

<constraint name="FOS\UserBundle\Validator\Unique">
    <option name="property">usernameCanonical</option>
    <option name="message">fos_user.username.already_used</option>
    <option name="groups">
        <!-- <value>Registration</value> -->
        <value>Profile</value>
    </option>
</constraint>

用户名不在我的注册表单中(我只是将其设置为隐藏),即验证不应产生任何错误...

也许有更好的方法可以删除表单的用户名...

2 个答案:

答案 0 :(得分:2)

要以正确的方式删除表单的用户名字段,您应该覆盖RegistrationFormType,创建自己的字段并从原始FOSUserBundle扩展

<?php
namespace Acme\UserBundle\Form\Type;
use Symfony\Component\Form\FormBuilder;
use FOS\UserBundle\Form\Type\RegistrationFormType as BaseType;

class RegistrationFormType extends BaseType
{
    public function buildForm(FormBuilder $builder, array $options)
    {
        $builder->add('email', 'email')
                ->add('plainPassword', 'repeated', array('type' => 'password'))

                // your other custom fields, if any.

    }
}

现在,您应该将覆盖的表单声明为服务,然后告诉FOSUserBundle配置文件您现在使用的是覆盖的表单。 Here is the complete documentation

答案 1 :(得分:1)

您可以将实体验证信息放在任何validation.yml文件中。所以你可以做到

#validation.yml
FQCN\Of\User\Entity:
  constraints:
    - FOS\UserBundle\Validator\Unique:
        property: usernameCanonical
        groups: [Profile]
        message: fos_user.username.already_used


  properties:
  # property validations here