Symfony - 在 INSERT、UPDATE 或 DELETE 中以不同方式验证实体

Symfony - Validate entity differently in INSERT, UPDATE or DELETE

我想在创建、更新或删除实体时以不同的方式验证实体原则。

我的实体中有一个实体约束验证器 class。

// src/AppBundle/Entity/AcmeEntity.php
use AppBundle\Validator\Constraints as AcmeAssert;

/**
* @AcmeAssert\CustomConstraint
*/
class AcmeEntity
{
    // ...
    protected $name;

    // ...
}

在我的 CustomConstraint 中,我想确定实体是否会被更新、创建或删除以执行特定的验证程序。

使用工作单元是一种解决方案吗?

制作这个的最佳方法是什么?

我认为这个问题在很多应用程序中很常见?

谢谢大家;)

您可以使用 validation groups based on the submitted data 或在通过验证组创建表单时处理它。 例如,在您的控制器中创建表单时;

$form = $this->createForm(new AcmeType(), $acme, ['validation_groups' => ['create']]);

那么你的实体会是这样的;

    /**
     * Get name
     *
     * @Assert\Length(min=2, max=11, groups={"create", "update"})
     * @AcmeAssert\ContainsAlphanumeric(groups={"create"}) // only applied when create group is passed
     * @return string
     */
    public function getName()
    {
        return $this->name;
    }

这就是验证组的用途。

由于 Symfony Forms 从实体注释中读取验证并在内部使用 Validator 组件,您可以在文档中查看这些文章: