Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/symfony/6.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
为什么我的Symfony2@uniquentity约束根本不起作用?_Symfony_Constraints - Fatal编程技术网

为什么我的Symfony2@uniquentity约束根本不起作用?

为什么我的Symfony2@uniquentity约束根本不起作用?,symfony,constraints,Symfony,Constraints,我的应用程序中有以下实体类: <?php namespace ...; // use ... use Doctrine\ORM\Mapping as ORM; use Symfony\Bridge\Doctrine\Validator\Constraints\UniqueEntity;; // ... /** * @ORM\Table(name="sc_user") * @ORM\Entity(repositoryClass="...\UserRepository") * @O

我的应用程序中有以下实体类:

<?php

namespace ...;

// use ...
use Doctrine\ORM\Mapping as ORM;
use Symfony\Bridge\Doctrine\Validator\Constraints\UniqueEntity;;
// ...

/**
 * @ORM\Table(name="sc_user")
 * @ORM\Entity(repositoryClass="...\UserRepository")
 * @ORM\HasLifecycleCallbacks()
 * @UniqueEntity(fields={"email", "username"})
 */
class User implements UserInterface, \Serializable, EquatableInterface
{
    /**
     * @var integer $id
     *
     * @ORM\Column(name="id", type="integer")
     * @ORM\Id
     * @ORM\GeneratedValue(strategy="AUTO")
     */
    private $id;

    /**
     * @var string $email
     *
     * @ORM\Column(name="email", type="string", length=255, unique=true)
     *
     * @Assert\NotBlank(groups={"registration"})
     * @Assert\Email(groups={"registration"})
     */
    private $email;

    /**
     * @var string $username
     *
     * @ORM\Column(name="username", type="string", length=32, unique=true)
     *
     * @Assert\NotBlank(groups={"registration"})
     */
    private $username;

    // ...
}

根据此处的Symfony2文件:

我做什么都不管用。我得到的不是预期的表单验证错误,而是以下异常:

SQLSTATE[23000]:完整性约束冲突:1062重复项 'admin@scire.com'用于键'UNIQ_D8183973E7927C74'

这是错误的!有人知道如何解决此问题吗?

尝试添加

framework:
    validation:
        enable_annotations: true

对于您的应用程序配置

问题的解决方法如下:

@UniqueEntity(fields={"email"}, groups={"registration"})
@UniqueEntity(fields={"username"}, groups={"registration"})

注册组丢失,我需要将它们分成两个单独的批注。

出现此问题的另一个原因是,如果您使用表单集合并包含处理关联实体的子表单,则必须在根表单和所有子表单中将
级联验证设置为

请参阅中的提示:

要激活CategoryType上的验证,请将
cascade\u验证
选项添加到
TaskType

更新:

为了确保您的子实体得到验证,还有更好的方法。Symfony提供的
有效
约束正是出于这个原因。发件人:

有效
此约束用于对作为特性嵌入到正在验证的对象上的对象启用验证。这允许您验证对象及其关联的所有子对象

请注意ignoreNull

例如,要正确使用pid(可以为空):


你好,约瑟夫,这似乎是个老问题,但我和你有同样的问题-只是想知道-你需要,我不知道,在什么地方创建验证组吗?我添加了唯一实体字段,和您完全一样,只在电子邮件和手机上添加,但它仍然给我一个异常,而不是验证错误。有什么想法吗?@ILIKEBREANT您需要在
FormType
中的
setDefaultOptions
方法中声明验证组,为什么此解决方案与文档中所示的不同?文档是错误的,还是这个实现与文档示例有很大的不同?这就是我问题的答案。谢谢
@UniqueEntity("email")
@UniqueEntity("username")
framework:
    validation:
        enable_annotations: true
@UniqueEntity(fields={"email"}, groups={"registration"})
@UniqueEntity(fields={"username"}, groups={"registration"})
public function setDefaultOptions(OptionsResolverInterface $resolver)
{
    $resolver->setDefaults(array(
        'data_class' => 'Acme\TaskBundle\Entity\Task',
        'cascade_validation' => true,
    ));
}
constraints:
- Symfony\Bridge\Doctrine\Validator\Constraints\UniqueEntity:
  fields: [page, pid, position]
  errorPath: page
  groups: [Menu]
  message: "Page already exists with that parent"
  ignoreNull: false