取消prePersist中的保存或更新

时间:2016-10-07 15:22:40

标签: symfony sonata-admin

如果持续测试后我想取消操作。我不知道我是如何徒劳地尝试重定向目标的。

/**
 * @param mixed $object
 */
public function prePersist($object)
{
    if (is_null($object->getFile())) {
    }
}

任何帮助?

2 个答案:

答案 0 :(得分:2)

对你来说可能有点晚了。既然我一直在寻找同样的东西,这就是我的解决方案。

似乎无法在Sonatas prePersist方法中进行任何验证。

对于像你这样做的简单NotNull验证,我将向实体添加一个简单的验证约束,或者如果该字段未映射到表单元素本身。

如果您想在奏鸣曲保存过程中进行一些额外的验证,请覆盖validate方法。这个方法在prePersis / preUpdate方法之前调用,它允许您添加验证消息。

use Sonata\CoreBundle\Validator\ErrorElement;

public function validate(ErrorElement $errorElement, $object)
{
    $errorElement->with('file')->addViolation('Hey, this is a validation message');
}

答案 1 :(得分:0)

我也迟到了,但如果你和我一样面临同样的问题。这是我在 Doctrine 方面的工作

    use ACME\Exceptions\CustomException;

    public function prePersist($object)
    {
        // Do some stuff with your entity $object
        if (//Something) {
            $this->getRequest()->getSession()->getFlashBag()->add(
                'error',
                'Something wrong happens');
     
            throw new CustomException('Something wrong happens');
        }
        
    }

    /** Overwrite create methode to catch custom error */
    public function create($object)
    {
        try {
            $this->em->beginTransaction();
            $res = parent::create($object);
            $this->em->getConnection()->commit();

            return $res;
        } catch (CustomException $e) {
            $this->em->getConnection()->rollBack();

            return null;
        }
    }

通过这种方式,您可以在 prePersist(和/或 postPersist)中验证或执行任何您想要的操作并取消创建并抛出异常。

不幸的是,它仍然显示成功的闪存包,但在您的数据库中保留了任何内容。