由于我正在扩展BaseUser
,因此我的用户实体中没有该属性$name
。如何添加验证?我可以只$username
向这个实体添加一个属性吗?这是否会混淆或覆盖某些功能或验证或本地提供给用户类的功能或验证?
我提出了这个问题:FOSUserBundle - 验证用户名、密码或电子邮件字段。
但是由于我使用了一堆注释验证,这对我不起作用。
后续问题 - 我在fosUSerBundle
XML 文件中看到,用于验证用户它本身有一个检查器以使用已获取的用户名。我没有获得该功能,如果我尝试添加与现有用户同名的用户,我的会直接出现 SQL 错误消息。这是因为我使用了一起覆盖 XML 验证文件的注释吗?
<?php
namespace BizTV\UserBundle\Entity;
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;
因此,我查看了此处(symfony2 在表单中使用验证组)并通过在构建表单时将其添加到控制器来尝试该解决方案。什么都没有发生(仍然直接跳转到 INSERT INTO SQL 错误)
$entity = new User();
$request = $this->getRequest();
$form = $this->createForm(new newUserType($tempCompany), $entity, array('validation_groups'=>'registration'));
$form->bind($request);
我还尝试以这种方式在表单类中设置此验证组“注册组”(应该“免费”为您提供唯一的用户和电子邮件验证):
use Symfony\Component\OptionsResolver\OptionsResolverInterface;
public function setDefaultOptions(OptionsResolverInterface $resolver)
{
$resolver->setDefaults(array(
'validation_groups' => array('registration'),
));
}
仍然没有任何反应。保存时直接出现 SQL 错误。