Php 如果不是图像文件,Yii2图像验证程序将抛出错误

Php 如果不是图像文件,Yii2图像验证程序将抛出错误,php,image,validation,yii2,Php,Image,Validation,Yii2,我有一个简单的图像文件输入验证程序,如下所示: public function rules() { return [ ['thumbnail', 'image', 'minWidth' => 800], ]; } 但是如果我尝试发送一个txt文件,它不会显示错误消息,但是ImageValidator会向我抛出一个错误: PHP通知–yii\base\ErrorException getimagesize():读取错误 为什么会发生这种情况?为什么它不在图像

我有一个简单的图像文件输入验证程序,如下所示:

public function rules()
{
    return [
        ['thumbnail', 'image', 'minWidth' => 800],
    ];
}
但是如果我尝试发送一个txt文件,它不会显示错误消息,但是
ImageValidator
会向我抛出一个错误:

PHP通知–yii\base\ErrorException
getimagesize():读取错误

为什么会发生这种情况?为什么它不在图像规则上停止,如果它不是图像文件,为什么调用
getimagesize
?我怎样才能抑制它


几次之后,我有了以下解决方法:

['thumbnail', 'image', 'minWidth' => 800, 'when' => function($model) {
    $check = @getimagesize($model->thumbnail->tempName);
    if( !$check ) $model->addError('thumbnail', 'File is not an image.');
    if( !$check['mime'] || !in_array($check['mime'], ['image/jpg', 'image/jpeg']) ) $model->addError('thumbnail', 'File is not jpeg.');
    return $check ? true : false;
}],
但正确的形式是

['thumbnail', 'image',
    'extensions' => ['png', 'jpg', 'gif'],
    'mimeTypes' => ['image/*'],
    'minWidth' => 800],

我建议将此报告为错误-当输入无效时,验证器不应抛出异常,这是验证器避免此类错误的要点。这不是一个异常,而是一个注意事项。但在开发模式下,它会阻止视图。Yii将所有通知视为例外,因此它仍然是一个bug。@rob006请参阅“何时不向问题标题添加标记”的说明-在标题前加上名称不是标题中标记名称的自然出现。也就是说,我不想再就这一点引发另一场旷日持久的争论——我觉得目前的版本还可以。是的,这个标题还可以。但如果在Yii2之后有一个a,情况可能会更好。都是因为搜索引擎。他们喜欢关键词。