我有一个从全局请求创建的DTO对象。在这个DTO中,我有一些我正在使用的Symfony约束验证器,我有一个自定义验证器来检查数据库中是否已经存在值。
class CreateProjectRequest implements RequestInterface
{
#[Assert\NotBlank]
#[Assert\Length(min: 10, max: 10)]
public string $remoteSource;
#[Assert\NotBlank]
#[UniqueRemoteEntityConstraint]
public string $remoteReference;
}
我的约束验证器UniqueRemoteEntityConstraint
需要remoteSource
的已验证值,然后才能继续检查其余部分。现在,我正在获取违规并检查remoteSource
属性是否存在违规。
class UniqueRemoteEntityConstraintValidator extends ConstraintValidator
{
/**
* @param UniqueRemoteEntityConstraint $constraint
*/
public function validate(mixed $value, Constraint $constraint): void
{
// Make sure `remoteSource` var is valid
foreach ($this->context->getViolations() as $violation) {
if ($violation->getPropertyPath() === 'remoteSource') {
// Remote source not valid cancel
return;
}
}
// Do checks for uniqueness
}
}
我相信这是粗略的,因为这取决于Symfony在我的DTO中检查属性的方式,它可能还没有验证它。是否有其他方法可以确保首先验证remoteSource
属性?
1条答案
按热度按时间tjrkku2a1#
看看这个问题和我的答案:
FunctionalTest Validator: Comparison with other property
您还可以直接在DTO上记录一个自定义验证器,从而可以访问所有属性。
示例