我有一个属性的实体:
/**
* @var string $name
*
* @Assert\NotBlank(groups={"foobar"})
* @ORM\Column(name="name", type="string", length=225, nullable=false)
*/
private $name;
Run Code Online (Sandbox Code Playgroud)
表格:
class MyType extends AbstractType
{
public function buildForm(FormBuilder $builder, array $options)
{
$builder->add('name');
}
public function getDefaultOptions(array $options)
{
return array(
'data_class' => '...',
'validation_group' => array('foobar'),
);
}
public function getName()
{
...
}
}
Run Code Online (Sandbox Code Playgroud)
在Controller中我绑定Request并调用$ form-> isValid()
但是如何定义validation_group呢?
我想创建一个服务提供商,以便使用电子邮件登录,而不是使用FOSUserBundle登录.
首先,我security.yml根据这里的文档在我的文件中写了这个:
security:
providers:
fos_userbundle:
id: fos_user.user_provider.username_email
Run Code Online (Sandbox Code Playgroud)
根据FOS文档,我逐一遵循这些步骤.
除了在MyUserManager.php我写这个(根据堆栈另一个问题在这里):
namespace Frontend\UserBundle\Model;
use FOS\UserBundle\Entity\UserManager;
use Symfony\Component\Security\Core\Exception\UsernameNotFoundException;
class CustomUserManager extends UserManager
{
public function loadUserByUsername($email)
{
/*$user = $this->findUserByUsernameOrEmail($username);
if (!$user) {
throw new UsernameNotFoundException(sprintf('No user with name "%s" was found.', $username));
}
return $user;*/
//Change it to only email (Default calls loadUserByUsername -> we send it to our own loadUserByEmail)
return $this->loadUserByEmail($email);
}
public function loadUserByEmail($email)
{
$user = $this->findUserByEmail($email);
if …Run Code Online (Sandbox Code Playgroud) 我正在使用FOSUserBundle.在我的项目中,我创建了自己的UserBundle并覆盖了控制器,表单和处理程序.现在,当用户尝试注册现有电子邮件时,该网站崩溃(电子邮件对于学说是唯一的).似乎没有进行验证.我以为我会在validation.yml中进行一些验证:
YOP\UserBundle\Entity\User:
constraints:
- Symfony\Bridge\Doctrine\Validator\Constraints\UniqueEntity: email
properties:
email:
- Email: ~
Run Code Online (Sandbox Code Playgroud)
为什么不在电子邮件领域进行验证?如何确保考虑我的验证限制?
PS:validation.yml文件不在我的UserBundle中,是不是有问题?
编辑:
我的UserBundle的代码在这里可用 我不明白为什么不再进行验证...