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

Jea*_*EAU 2 symfony-forms symfony doctrine-orm symfony-validator

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

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

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

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

    // ...
}
Run Code Online (Sandbox Code Playgroud)

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

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

做这个的最好方法是什么?

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

谢谢大家 ;)

Roo*_*eyl 5

您可以根据提交的数据使用验证组,也可以在通过传递验证组创建表单时处理它。例如,在您的控制器中创建表单时;

$form = $this->createForm(new AcmeType(), $acme, ['validation_groups' => ['create']]);
Run Code Online (Sandbox Code Playgroud)

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

    /**
     * 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;
    }
Run Code Online (Sandbox Code Playgroud)