[英]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.