在Yii2中更新图像

使用Yii2更新图像时,我面临验证问题。它总是要求我上传图像。 但我不想要这个。 总是更新图像是没有必要的。

我试过skipOnEmpty但它不能正常工作,它会导致上传照片,这也是不正确的。

请帮忙!!

模型

public function rules()
    {
        return [
            [['carid', 'name'], 'required'],
            [['carid', 'coverphoto', 'status'], 'integer'],
            [['name'], 'string', 'max' => 200],
            [['imageFiles'], 'image','extensions' => 'png, jpg, jpeg, gif', 'maxFiles' => 4, 'minWidth' => 100, 'maxWidth' => 800, 'minHeight' => 100, 'maxHeight'=>600,'skipOnEmpty' => true],


        ];
    }

调节器

public function actionUpdate($id)
    {
        $model = $this->findModel($id);

        if ($model->load(Yii::$app->request->post()) && $model->save()) {
            return $this->redirect(['view', 'id' => $model->photoid]);
        } else {
            return $this->render('update', [
                'model' => $model,
            ]);
        }
    }

您应该使用scenario进行更新。

作为一样,添加on条件模型对应用规则scenario

 [['imageFiles'], 'image','extensions' => 'png, jpg, jpeg, gif', 'maxFiles' => 4, 'minWidth' => 100, 'maxWidth' => 800, 'minHeight' => 100, 'maxHeight'=>600,'skipOnEmpty' => true, 'on' => 'update-photo-upload'],

并在控制器的操作中使用该scenario

public function actionUpdate($id)
{
    $model = $this->findModel($id);
    $model->scenario = 'update-photo-upload';
    ........
    .....
}

尝试按规则

[
    ['imageFiles'], 'file',
    'extensions' => 'png, jpg, jpeg, gif', 
    'mimeTypes' => 'image/jpeg, image/png',
    'maxFiles' => 4, 
    'minWidth' => 100, 
    'maxWidth' => 800, 
    'minHeight' => 100, 
    'maxHeight'=>600,
    'skipOnEmpty' => true
],

这在我的情况下工作,希望它也适用于你。


        **Your View Like This**

        <?php use yiiwidgetsActiveForm;?>
        <?php $form = ActiveForm::begin(['options' => ['enctype' => 'multipart/form-data']]) ?>
        <?= $form->field($model, 'imageFiles')->fileInput() ?>
        <div class="form-group">
        <?= Html::submitButton($model->isNewRecord ? 'Create' : 'Update', ['class' => $model->isNewRecord ? 'btn btn-success' : 'btn btn-primary']) ?>
         </div>
        <?php ActiveForm::end() ?>

    *** Your Controller Like This******

    use Yii;
    use yiiwebController;
    use appmodelsUploadForm;
    use yiiwebUploadedFile;

    class SiteController extends Controller
    {
        public function actionUpdate()
        {
            $model = new UploadForm ();
            $model->scenario = 'update';
            if (Yii::$app->request->isPost) {
                $model->imageFiles= UploadedFile::getInstance($model, 'imageFiles');
                if ($model->upload()) {
                    // file is uploaded successfully
                    return;
                }
            }

            return $this->render('update', ['model' => $model]);
        }
    }

 ***** Your ModelLike This ******

use yiibaseModel;
use yiiwebUploadedFile;

class UploadForm extends Model
{
    /**
     * @var UploadedFile[]
     */
    public $imageFiles;

    public function rules()
    {
        return [
             [['carid', 'name'], 'required'],
             [['carid', 'coverphoto', 'status'], 'integer'],
             [['name'], 'string', 'max' => 200],
             [['imageFiles'], 'file', 'skipOnEmpty' => false, 'extensions' => 'png, jpg', 'maxFiles' => 4,'on'=>'update'],
        ];
    }

    public function upload()
    {
        if ($this->validate()) { 
            foreach ($this->imageFiles as $file) {
                $file->saveAs('uploads/' . $file->baseName . '.' . $file->extension);
            }
            return true;
        } else {
            return false;
        }
    }

function scenario()
{
    return [
        'create' => ['imageFiles ', 'carid','name','coverphoto','status'],
        'update' => ['imageFiles ', 'carid','name','coverphoto','status'],
    ];
  }
}
链接地址: http://www.djcxy.com/p/88131.html

上一篇: Updating Image in Yii2

下一篇: How do you compose tasks in sbt?