0

我正在使用 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>

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

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

4

2 回答 2

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 配置文件您现在正在使用覆盖的表单。这是完整的文档

于 2012-04-03T17:06:31.280 回答
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
于 2012-03-29T12:59:45.820 回答