如何捕获实体中的异常?

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();
}

您应该始终在应用程序中添加错误检查和报告,在尝试删除文件之前检查文件是否存在。