如果持续测试后我想取消操作。我不知道我是如何徒劳地尝试重定向目标的。
/**
* @param mixed $object
*/
public function prePersist($object)
{
if (is_null($object->getFile())) {
}
}
任何帮助?
答案 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
)中验证或执行任何您想要的操作并取消创建并抛出异常。
不幸的是,它仍然显示成功的闪存包,但在您的数据库中保留了任何内容。