在Yii2中更新图像

时间:2015-10-03 07:23:52

标签: 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,
            ]);
        }
    }

3 个答案:

答案 0 :(得分:4)

您应该使用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';
    ........
    .....
}

答案 1 :(得分:0)

尝试规则

{{1}}

这适用于我的情况,希望它也适合你。

答案 2 :(得分:0)

        **Your View Like This**

        <?php use yii\widgets\ActiveForm;?>
        <?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 yii\web\Controller;
    use app\models\UploadForm;
    use yii\web\UploadedFile;

    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 yii\base\Model;
use yii\web\UploadedFile;

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