如何捕获实体中的异常?
How to catch exceptions in entity?
我的实体中有一个带有 @ORM\PostRemove() 的方法可以删除关联文件。
我想知道我是否应该这样做:
try {
unlink($file);
} catch (\Exception $e) {
// Nothing here?
}
在 catch 块中捕捉异常而不做任何事情有意义吗?或者也许我不应该在这里捕获异常,但是,我应该在哪里做呢?它应该是 LifecycleCallback 方法的例外吗?
我读过 here 我不应该在实体中使用记录器,所以我很困惑应该把什么放在那里。
您的实体不应真正包含应用程序的业务逻辑,其目的是将对象映射到数据库记录。
解决这个问题的方法取决于应用程序,例如,如果您有一个文件控制器和一个 removeAction,那么删除文件的最佳位置可能就是这里。
举个例子:(伪代码)
public function removeAction($id) {
$em = $this->getDoctrine()->getEntityManager();
$file = $em->getRepository('FileBundle:File')->find($id);
if (!$file) {
throw $this->createNotFoundException('No file found for id '.$id);
}
$filePath = $file->getPath();
if (file_exists($filePath) {
try {
unlink($filePath);
}
catch(Exception $e) {
// log it / email developers etc
}
}
$em->remove($file);
$em->flush();
}
您应该始终在应用程序中添加错误检查和报告,在尝试删除文件之前检查文件是否存在。
我的实体中有一个带有 @ORM\PostRemove() 的方法可以删除关联文件。
我想知道我是否应该这样做:
try {
unlink($file);
} catch (\Exception $e) {
// Nothing here?
}
在 catch 块中捕捉异常而不做任何事情有意义吗?或者也许我不应该在这里捕获异常,但是,我应该在哪里做呢?它应该是 LifecycleCallback 方法的例外吗? 我读过 here 我不应该在实体中使用记录器,所以我很困惑应该把什么放在那里。
您的实体不应真正包含应用程序的业务逻辑,其目的是将对象映射到数据库记录。
解决这个问题的方法取决于应用程序,例如,如果您有一个文件控制器和一个 removeAction,那么删除文件的最佳位置可能就是这里。
举个例子:(伪代码)
public function removeAction($id) {
$em = $this->getDoctrine()->getEntityManager();
$file = $em->getRepository('FileBundle:File')->find($id);
if (!$file) {
throw $this->createNotFoundException('No file found for id '.$id);
}
$filePath = $file->getPath();
if (file_exists($filePath) {
try {
unlink($filePath);
}
catch(Exception $e) {
// log it / email developers etc
}
}
$em->remove($file);
$em->flush();
}
您应该始终在应用程序中添加错误检查和报告,在尝试删除文件之前检查文件是否存在。