【发布时间】:2019-09-22 02:15:12
【问题描述】:
我正在使用 symfony 4.2 和 ReactJS。 我有一个带有邮件的表格。这封邮件应该是唯一的。所以我在 Entity 中包含了一个 UniqueEntity。
当我尝试使用表单创建帐户时,出现以下问题,它会抛出错误 500:"An error occurred","hydra:description":"An exception occurred while executing \u0027INSERT INTO app_users (id, username, email, is_active, firstname, lastname, api_link_key, facebook_id, facebook_picture_url) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?)\u0027 with params XXXXXX : Unique violation: 7 ERROR: duplicate key value violates unique constraint \u0022uniq_c2502824f85e0677\u0022\nDETAIL: Key (username)=(XXXXXX) already exists."
所以我在表单中没有消息错误,可能是因为这个错误 500 ?或者也许我应该在某处设置消息错误?
在我的实体中,当我设置邮件字段时,我也将用户名字段设置为相同的值。 UniqueEntity 禁止在同一行的两个字段中具有相同的值?
我的实体:
* @ORM\Table(name="app_users")
* @ORM\Entity(repositoryClass="App\Repository\UserRepository")
* @UniqueEntity("email")
*/
class User implements UserInterface, \Serializable
{
/**
* @ORM\Column(type="integer")
* @ORM\Id
* @ORM\GeneratedValue(strategy="AUTO")
*/
private $id;
/**
* @ORM\Column(type="string", length=254, unique=true)
* @Encrypted
*/
private $username;
/**
* @ORM\Column(type="string", length=255, unique=true)
* @Assert\Email()
* @Assert\NotBlank()
* @Encrypted
*/
private $email;
[...]
public function getEmail()
{
return $this->email;
}
public function setEmail($email): void
{
$this->email = $email;
$this->username = $email;
}
}
感谢您的帮助
【问题讨论】:
-
在将数据保存到数据库之前,您是否检查了表单/实体验证?像 $form->isValid() 或 $validator->validate($user)
-
前面是用ReactJS生成的,我用的是api-platform。所以我没有一个控制器来验证数据。 NotBlank 断言正在工作,因为我无法在没有数据的情况下发布表单
-
尝试使用验证组创建帐户并将 UniqueEntity 约束添加到验证组
-
SQL 错误不是抱怨您的
email列,而是抱怨您也声明为唯一的用户名。所以你可能想要做的是添加一个额外的约束,它也强制用户名的唯一性:@UniqueEntity("username") -
嘿,您是否将基本用法部分(代码示例下方)symfony.com/doc/current/reference/constraints/UniqueEntity.html 中的警告标记为红色并检查过,这些警告不会对您的情况造成问题?