我的实体中有一个方法@ORM \ PostRemove()删除了一个关联的文件。
我想知道我是否应该这样做:
try {
unlink($file);
} catch (\Exception $e) {
// Nothing here?
}
捕获异常并在catch块中什么都不做是否有意义?或者也许我不应该在这里遇到异常,但那时,我应该在哪里做呢?它应该是LifecycleCallback方法的例外吗? 我读过here我不应该在实体中使用记录器,所以我很困惑在那里放什么。
答案 0 :(得分:1)
您的实体不应该真正包含应用程序的业务逻辑,其目的是将对象映射到数据库记录。
解决这个问题的方法取决于应用程序,例如,如果你有一个文件控制器和一个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();
}
您应该始终在应用程序中添加错误检查和报告,在尝试删除文件之前检查该文件是否存在。