Php 注册表不会触发验证约束
我有一个Doctrine用户实体,我正在尝试为注册表添加表单验证程序,但在任何情况下,它们都不会为注册表启动 我的用户实体:Php 注册表不会触发验证约束,php,symfony,doctrine-orm,symfony-2.1,symfony-forms,Php,Symfony,Doctrine Orm,Symfony 2.1,Symfony Forms,我有一个Doctrine用户实体,我正在尝试为注册表添加表单验证程序,但在任何情况下,它们都不会为注册表启动 我的用户实体: namespace JMSHockey\AppBundle\Entity; use Doctrine\ORM\Mapping as ORM; use Symfony\Component\Security\Core\User\AdvancedUserInterface; use Symfony\Component\Validator\Constraints as Asse
namespace JMSHockey\AppBundle\Entity;
use Doctrine\ORM\Mapping as ORM;
use Symfony\Component\Security\Core\User\AdvancedUserInterface;
use Symfony\Component\Validator\Constraints as Assert;
use Symfony\Bridge\Doctrine\Validator\Constraints\UniqueEntity;
/**
* My\AppBundle\Entity\User
*
* @ORM\Table(name="user")
* @ORM\Entity(repositoryClass="My\AppBundle\Entity\UserRepository")
* @UniqueEntity(fields={"email"}, message="Sorry, this email address is already in use.", groups={"registration"})
* @UniqueEntity(fields={"username"}, message="Sorry, this username is already taken.", groups={"registration"})
*/
class User implements AdvancedUserInterface,\Serializable
{
/**
* @var integer $id
*
* @ORM\Column(name="id", type="integer", nullable=false)
* @ORM\Id
* @ORM\GeneratedValue(strategy="IDENTITY")
*/
private $id;
/**
* @var string $email
*
* @ORM\Column(name="email", type="string", length=75, nullable=false)
* @Assert\Email()
* @Assert\NotBlank()
*/
private $email;
/**
* @var string $username
*
* @ORM\Column(name="username", type="string", length=75, nullable=false)
* @Assert\NotBlank()
*/
private $username;
...
}
这是我的用户类型表单:
namespace My\AppBundle\Form\Type;
use Symfony\Component\Form\AbstractType;
use Symfony\Component\Form\FormBuilderInterface;
class UserType extends AbstractType
{
public function buildForm(FormBuilderInterface $builder, array $options)
{
$builder->add('email','email');
$builder->add('username','text');
...
}
public function getDefaultOptions(array $options)
{
return array(
'data_class' => 'My\AppBundle\Entity\User',
'validation_groups' => array('registration'),
);
}
public function getName()
{
return 'user';
}
}
最后,登记表:
namespace My\AppBundle\Form\Type;
use Symfony\Component\Form\AbstractType;
use Symfony\Component\Form\FormBuilderInterface;
class RegistrationType extends AbstractType
{
public function buildForm(FormBuilderInterface $builder, array $options)
{
$builder->add('user', new UserType());
}
public function getName()
{
return 'registration';
}
}
看起来我肯定错过了一些明显的东西,但是在Symfony手册和我在网上找到的资源之间,我还不能确定它是什么 您在哪里找到此组选项 您可以将其保留为空,以便为此实体触发它。如果您想指定一个实体,看起来应该使用em选项
我也有同样的问题 我通过在
RegistrationType
类中的setDefaultOptions
方法中添加cascade\u validation
at true解决了此问题,并使用OptionsResolutionrFace组件中的optionsResolverFace
类:
namespace My\AppBundle\Form\Type;
使用Symfony\Component\Form\AbstractType;
使用Symfony\Component\Form\FormBuilderInterface;
使用Symfony\Component\OptionsResolver\OptionsResolverInterface
类注册类型扩展了AbstractType
{
公共函数buildForm(FormBuilderInterface$builder、array$options)
{
$builder->add('user',new UserType());
}
公共函数getName()
{
申报‘注册’;
}
公共函数setDefaultOptions(选项ResolvePrinterface$resolver)
{
$resolver->setDefaults(数组(
“级联_验证”=>true
));
}
}
您是否有用于验证的批注?是的,我在我的config.yml中的framework部分设置了验证:{enable_annotations:true}
。您是否尝试对您的注册类型专门设置cascade_验证?我是在您对其进行了注释后才这样做的,但似乎没有产生任何影响。我还意识到这会影响所有约束,而不仅仅是唯一性约束。组选项是这样的,约束只会降级到注册表中。我不希望每次更新都触发约束,否则如果每次不更改电子邮件地址,对象将永远无法更新。@Andy,这是错误的。当您尝试在不更改电子邮件或用户名的情况下更新对象时,验证不会失败。此验证检查此字段是否唯一,即没有其他记录具有此值。当更新时,它不会对自身进行检查,因此不会有问题。您是否尝试过删除验证组和组选项并查看其是否有效?