Symfony Sonata Admin sonata_type_collection 与实体 UniqueEntity 验证

Łuk*_*ski 5 php unique-constraint symfony sonata-admin

当实体 A 与实体 B 具有 OneToMany 关系时,实体 B 对字段具有唯一约束,例如:

/**
 * @ORM\Column(type="string", length=100, nullable=true, unique=true, options={"default":""})
 * @Assert\Valid()
 * @var string
 */
protected $url = '';
Run Code Online (Sandbox Code Playgroud)

和你的正常情况一样,你会添加到实体类注释中:

@UniqueEntity(fields={"url"}, message="Url can be assigned only to one trigger")
Run Code Online (Sandbox Code Playgroud)

但它在实体A的奏鸣曲管理类中不起作用。为了让它工作,有一个非常好的和简单的方法:

在entityA的管理类中添加:

/**
 * @param ErrorElement $errorElement
 * @param mixed $object
 */
public function validate(ErrorElement $errorElement, $object)
{
    $errorElement
        ->with('entityB') //field describing connection to entityB in entityA
        ->addConstraint(new All([
            new UniqueEntity([
                'fields' => 'url',
                'message' => 'Url can be assigned only to one trigger',
            ]),
        ]))
        ->end();
}
Run Code Online (Sandbox Code Playgroud)

那它!其独特领域的子实体的验证将在管理类中正常工作。