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错误...
这并不完全是问题的答案,但到目前为止对我来说是一个解决方案。我将验证器添加到我的表单(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 };\nRun Code Online (Sandbox Code Playgroud)\n
| 归档时间: |
|
| 查看次数: |
4719 次 |
| 最近记录: |