php - Yii2 图片文件上传的条件验证

标签 php yii yii2

我对 Yii 很陌生。

只有当用户选择了图像时,我才必须应用图像验证(允许使用 .svg 和 .png)。

  public function rules() {
        return [
            [['logo'], 'file', 'extensions'=>'svg, png'],
        ];
    }

当用户选择图像时它工作正常。 但是在更新表单上我们只有文件名。现在,如果我们提交表单,它将应用验证。仅当用户更改图像时我才需要验证。

我的 Controller 代码

if ($model->load(Yii::$app->request->post())) {
            $model->logo = UploadedFile::getInstance($model, 'logo');
            if (!empty($model->logo)) {
                $model->logo->name = $model->logo->baseName . Yii::$app->formatter->asTimestamp(date('Y-d-m h:i:s')) . '.' . $model->logo->extension;
                $logoPath = Yii::getAlias('@common') . '/web/uploads/logo/' . $model->logo->name;
                $model->logo->saveAs($logoPath, false);
            }
            if ($model->updateSite()) {
                return $this->redirect(['site-list']);
            }
        }

如果您需要更多说明,请告诉我。 谢谢。

最佳答案

在这种情况下使用场景可能会有所帮助。

根据场景定义验证规则

public function rules() {
    return [
        [['logo'], 'file', 'extensions'=>'svg, png', 'on' => 'imageUploaded'],
    ];
}

然后在 Controller 中为模型定义场景。像这样。

if ($model->load(Yii::$app->request->post())) {
        $model->logo = UploadedFile::getInstance($model, 'logo');
        if (!empty($model->logo)) {
           $model->scenario = 'imageUploaded';
           ...
        }
    }

也可以为条件验证定义匿名函数。

public function rules() {
    return [
        [['logo'], 'file', 'extensions'=>'svg, png', 'when' => function ($model) {
             //return true to apply the rule
             return $model->isImageUploaded();
        }],
    ];
}

可以在此处找到有关规则和场景的更多信息 https://github.com/yiisoft/yii2/blob/master/docs/guide/input-validation.md#declaring-rules-

关于php - Yii2 图片文件上传的条件验证,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33146149/

相关文章:

php - 具有两个日期字段的日期范围内高于 x 的字段的 MySQL 总和

php - Yii2:如何记录每个请求的 Controller 和操作ID?

PHP - 如何在循环中创建变量名?

php - 如何删除外键和主键

php - 在 PHP MySQL WHERE 子句中使用数组

javascript - 使用 PHP 抓取 SQL 数据,然后将数组发送到 Javascript

widget - 在静态调用的方法中使用小部件

php - 使用 ENGINE 子句在迁移中创建表失败

yii2 - 在迁移中使用Schema Builder特性时指定unsigned属性?

php - yii2 ActiveRecord 通过计算查找 OrderBy