如何捕获实体中的异常?

时间:2015-01-21 11:58:09

标签: php symfony entity

我的实体中有一个方法@ORM \ PostRemove()删除了一个关联的文件。

我想知道我是否应该这样做:

try {
    unlink($file);
} catch (\Exception $e) {
    // Nothing here?        
}

捕获异常并在catch块中什么都不做是否有意义?或者也许我不应该在这里遇到异常,但那时,我应该在哪里做呢?它应该是LifecycleCallback方法的例外吗? 我读过here我不应该在实体中使用记录器,所以我很困惑在那里放什么。

1 个答案:

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

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