簡體   English   中英

Yii2條件驗證圖像文件上傳

[英]Yii2 conditional validation for image file upload

我是Yii的新手。

只有在用戶選擇了圖像時,我才必須應用圖像驗證(允許.svg和.png)。

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

當用戶選擇圖像時,它工作正常。 但是在更新表格上我們只有文件的名稱。 現在,如果我們提交表單,它將應用驗證。 我只有在用戶更改圖像時才需要驗證。

我的控制器代碼

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'],
    ];
}

然后在控制器中定義模型的場景。 像這樣的東西。

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-

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM