Symfony 5.4使用唯一和主机名一起的问题



我试图在Syfony 5.4实体中一起使用唯一和主机名约束。我们:

/**
* @ORMColumn(name="domain", type="string", length=150, nullable=false, unique=true)
* @AssertNotBlank()
* @AssertHostname()
*/
private $domain;

这个验证没有问题。但是,当我添加唯一约束时,它会失败,并提示:该值应该是array类型|IteratorAggregate。

/**
* @ORMColumn(name="domain", type="string", length=150, nullable=false, unique=true)
* @AssertNotBlank()
* @AssertUnique()
* @AssertHostname()
*/
private $domain;

我需要验证,是的,在这种情况下,它在数据库插入失败,但我想验证表单。怎样才是正确的方法?

谢谢

博士

如果我理解正确的话,您希望验证域(或主机名)在数据库表中是唯一的。在这种情况下,您必须使用UniqueEntity(参见https://symfony.com/doc/current/reference/constraints/UniqueEntity.html)。

值得一提的是,这并不能保护你不受竞态条件的影响。

<?php
namespace AppEntity;
use DoctrineORMMapping as ORM;
use SymfonyBridgeDoctrineValidatorConstraintsUniqueEntity;
use SymfonyComponentValidatorConstraints as Assert;
/**
* @ORMEntity
* @UniqueEntity("domain")
*/
class YourEntity
{
/**
* @ORMColumn(name="domain", type="string", length=150, nullable=false, unique=true)
* @AssertNotBlank()
* @AssertHostname()
*/
protected $domain;
}

最新更新