我正在使用 Symfony 4.4,
出于安全原因,在提交嵌入 Product 实体的 OrderProduct 实体时,我必须控制从 Product 获取的 OrderProduct 的一些值。
所以,它是一个 Symfony API,我收到一个 JSON 格式的 orderProduct:
{
"product" : { "id" : 82 },
"price" : 9.7,
"quantity": 3,
//...
}
我必须从数据库中获取产品,以测试价格是否正确。
有关如何创建自定义约束验证器的详细信息: https://symfony.com/doc/current/validation/custom_constraint.html
注意:您的验证器必须是类约束验证器,以便您可以访问每个值,而不仅仅是价格或产品属性。 https://symfony.com/doc/current/validation/custom_constraint.html#class-constraint-validator
我认为自定义验证约束将是不错的选择。在您的自定义约束验证器注入
ProductRepository
中,找到您的实体并比较所需的值。也许为您的实体创建 OrderProduct
验证约束并验证一些字段。
public function validate($orderProduct, Constraint $constraint)
{
// a few checks
$product = $this->productRepository->find($orderProduct->getProduct()->getId());
if (!$this->isPriceValid($product->getPrice(), $orderProduct->getPrice()) {
$this->context->buildViolation($constraint->message)
->atPath('price')
->addViolation();
}
// ...
}
public function isPriceValid(float $oldPrice, float $newPrice): bool
{
return $oldPrice === $newPrice;
}