Yii2 UploadedFile saveAs()错误处理

时间:2016-02-17 21:01:38

标签: yii2

我有一个控制器操作,通过ajax请求接受文件上传,并保存有关该文件的基本信息。如果保存成功,则执行saveAs()以将文件实际保存到文件系统。有点像这样:

if ($model->save()) {
    $file->saveAs('uploads/' . $file->baseName . '.' . $file->extension);
}

一切都很好但我想围绕saveAs()实施检查,这样我就可以删除刚刚插入的记录,如果由于某种原因,文件无法保存。我看到UploadedFile有一个$hasError$errors但是如果保存文件代码执行时出现问题似乎停止在saveAs()处,而不是移过它实际让我处理错误。

如果存在问题,是否有办法捕获saveAs()错误并执行某些逻辑?

修改

我尝试过分配返回变量,如下所示。但是,这是我第一次注意到如果发生saveAs()错误,没有代码通过saveAs()执行。

$saveResult = $file->saveAs('uploads/' . $file->baseName . '.' . $file->extension);
// Any code down here won't be executed if (for example)
// that "uploads" directory doesn't exist and the saveAs() fails

1 个答案:

答案 0 :(得分:1)

如果此代码抛出异常(目录不存在,不可写等),您可以使用常规的try-catch块来处理:

try {
    $file->saveAs(...);
} catch (\Exception $e) {
    ...
}

阅读有关exceptions的官方PHP文档。

另一种方法是添加检查以防止所有最常见的错误:

if (!is_dir($uploadPath)) {
    ...
}

如果此类目录不存在,等等。

为了摆脱这种情况,我建议编写测试并在部署脚本中创建该文件夹(如果它们不存在)。