Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/229.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 注册表不会触发验证约束_Php_Symfony_Doctrine Orm_Symfony 2.1_Symfony Forms - Fatal编程技术网

Php 注册表不会触发验证约束

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

我有一个Doctrine用户实体,我正在尝试为注册表添加表单验证程序,但在任何情况下,它们都不会为注册表启动

我的用户实体:

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,这是错误的。当您尝试在不更改电子邮件或用户名的情况下更新对象时,验证不会失败。此验证检查此字段是否唯一,即没有其他记录具有此值。当更新时,它不会对自身进行检查,因此不会有问题。您是否尝试过删除验证组和组选项并查看其是否有效?