symfony2如何向用户名添加验证规则?

Mat*_*der 8 validation username symfony fosuserbundle

由于我正在扩展BaseUser,我的用户实体中没有属性$ name,如何向其添加验证,我可以向该实体添加属性$ username吗?是否会混淆或覆盖某些功能或验证或本机提供给用户类的?

我解决了这个问题FOSUserBundle - 验证用户名,密码或电子邮件字段,但因为我使用了一堆对我不起作用的注释验证.

后续问题 - 我在fosUSerBundle XML文件中看到用于验证用户本身是一个使用截取用户名的检查器,我没有得到该功能,如果我尝试添加,我会直接看到SQL错误消息与现有用户同名的用户.这是因为我使用注释会一起覆盖XML验证文件吗?

use BizTV\UserBundle\Validator\Constraints as BizTVAssert;
use Symfony\Component\Security\Core\User\AdvancedUserInterface;
use Symfony\Bridge\Doctrine\Validator\Constraints\UniqueEntity;


use FOS\UserBundle\Model\User as BaseUser;

use Doctrine\ORM\Mapping as ORM;

use BizTV\BackendBundle\Entity\company as company;


class User extends BaseUser implements AdvancedUserInterface
{
    /**
     * @ORM\Id
     * @ORM\Column(type="integer")
     * @ORM\GeneratedValue(strategy="AUTO")
     */
    protected $id;  

//TODO: Add regex on $name for a-z, A-Z, 0-9 and _ (underscore) 
//TODO: Add constraint on $name    * @BizTVAssert\NameExists    (and finish coding this constraint)

    /**
    * @var object BizTV\BackendBundle\Entity\company
    *  
    * @ORM\ManyToOne(targetEntity="BizTV\BackendBundle\Entity\company")
    * @ORM\JoinColumn(name="company", referencedColumnName="id", nullable=false)
    */
    protected $company; 

    /**
    * @var object BizTV\UserBundle\Entity\UserGroup
    * @ORM\ManyToOne(targetEntity="BizTV\UserBundle\Entity\UserGroup")
    * @ORM\JoinColumn(name="userGroup", referencedColumnName="id", nullable=true)
    */
    protected $userGroup;   
Run Code Online (Sandbox Code Playgroud)

所以我在这里看了(symfony2在表单中使用验证组)并在构建表单时通过将其添加到控制器来尝试该解决方案,没有任何反应(仍然直接跳转到INSERT INTO SQL错误)

    $entity  = new User();
    $request = $this->getRequest();
    $form    = $this->createForm(new newUserType($tempCompany), $entity, array('validation_groups'=>'registration'));
    $form->bind($request);
Run Code Online (Sandbox Code Playgroud)

我还试图在表单类中设置这个validatino组"注册组"(这应该是免费提供"免费"的唯一用户和电子邮件验证):

use Symfony\Component\OptionsResolver\OptionsResolverInterface;

public function setDefaultOptions(OptionsResolverInterface $resolver)
{
$resolver->setDefaults(array(
    'validation_groups' => array('registration'),
));
}
Run Code Online (Sandbox Code Playgroud)

仍然没有任何反应 直接保存时出现SQL错误...

Mat*_*der 2

这并不完全是问题的答案,但到目前为止对我来说是一个解决方案。我将验证器添加到我的表单(UserType)中。

\n\n
    $validatorUsername = function(FormEvent $event){\n        $form = $event->getForm();\n        $myExtraField = $form->get(\'username\')->getData();\n        if ( preg_match(\'/^[a-zA-Z0-9_]+$/\',$myExtraField) == false ) {\n          $form[\'username\']->addError(new FormError("Du f\xc3\xa5r inte anv\xc3\xa4nda andra specialtecken \xc3\xa4n understreck (_)"));\n        }\n\n    };\n
Run Code Online (Sandbox Code Playgroud)\n