Php 验证fosuser字段用户名

Php 验证fosuser字段用户名,php,validation,symfony,fosuserbundle,Php,Validation,Symfony,Fosuserbundle,我想验证用户名字段,这是一个fosuser字段,但根据我自己的验证规则 下面是我的代码片段: FormType-UserType.php public function buildForm(FormBuilderInterface $builder, array $options) { $builder ->add('username') ... } 实体-User.php class User extends BaseUser { //

我想验证用户名字段,这是一个fosuser字段,但根据我自己的验证规则

下面是我的代码片段:

FormType-UserType.php

public function buildForm(FormBuilderInterface $builder, array $options)
{    
    $builder
        ->add('username')
     ...
}
实体-User.php

class User extends BaseUser
{
    //no mention of any of the fosuser properties here
 ...
}
验证:Validation.yml

Project\MyBundle\Entity\User:
constraints:
    - Symfony\Bridge\Doctrine\Validator\Constraints\UniqueEntity:
        fields: username
        errorPath: username
        message: 'This username is already in use.'
properties:
    dob:
        - NotBlank: ~
        - Type: \DateTime
控制器:UserController.php

public function createAction(Request $request, $brandId)
{
    $entity = new User();
    $form = $this->createCreateForm($entity, $brandId);
    $form->handleRequest($request);

    if ($form->isValid()) {
        ...
    }
}
验证总是失败,即$form->isValidis true,即使我在表单中输入了一个已经存在的用户名。请帮忙,因为到目前为止我还没有找到解决办法。我尝试将orm.xml文件复制到validation文件夹下的myBundle。但它仍然没有效果。任何帮助都将不胜感激

当保存发生时,我也会得到一个重复的插入错误

An exception occurred while executing 'UPDATE user SET username = ?, username_canonical = ? WHERE id = ?' with params ["sub5", "sub5", 27]:

SQLSTATE[23000]: Integrity constraint violation: 1062 Duplicate entry 'sub5' for key 'UNIQ_7BB0CD5292FC23A8' 
如果您尝试在User.php中使用@uniquentityusername,则会自动在表单中抛出一个错误,表示它已被使用

use Symfony\Bridge\Doctrine\Validator\Constraints\UniqueEntity;
/**
 * User
 *
 * @ORM\Table(name="users")
 * @ORM\Entity()
 * @UniqueEntity("username")
 *
 */
这对我很管用。但是,我不使用FosUserBundle,但原则应该是相同的


此外,我还找到了可以帮助您的方法,或者可能是那些正在使用FosUserBundle的方法。

您确实尝试过清除缓存,对吗?validation.yml文件放在哪里?如果它是FOSUserBundle的子包,则可能根本不会加载它,因为FOS使用xml。