آپلود فایل در Yii2

برای آپلود فایل به صورت زیر عمل می کنیم.
ابتدا مدل:
ستونی که من در دیتابیس برای ذخیره تصویر در نظر گرفته ام picture می باشد .

  [['picture'], 'file', 'skipOnEmpty' => true, 'extensions' => 'png,jpg'],

سپس فورم برای قرار دادن امکان انتخاب تصویر:
برای امکان انتخاب تصویر و آپلود آن می بایست فورم خود را به این قابلیت مجهز کینم.

<?php $form = ActiveForm::begin(['options' => ['enctype' => 'multipart/form-data']]); ?>

   <?= $form->field($model, 'picture')->fileInput() ?>

        <?= Html::submitButton($model->isNewRecord ? Yii::t('app', 'ثبت') : Yii::t('app', 'ویرایش')
, ['class' => $model->isNewRecord ? 'btn btn-success' : 'btn btn-primary']) ?>
    <?php ActiveForm::end(); ?>

و در نهایت در کنترلر:
با استفاده از UploadedFile::getInstance تصویر ارسال شده را دریافت می کنیم
و با قرار دادن یک نام منحصر به فرد اونو در محل دلخواه ذخیره می کنیم
نکته ابتدا namespace را صدا میزنیم

use yii\web\UploadedFile;

و در ادامه

  $UploadedFile = UploadedFile::getInstance($model, 'image');
 if ($model->save()) {
                if (!empty($UploadedFile)) {
                    $pathinfo = strtolower($UploadedFile->extension);
                    $FileName = Yii::$app->security->generateRandomString() . '.' . $pathinfo;
                    $model->image = $FileName;
                    $model->save(false);
                    $path = \Yii::$app->params['path']['download_upload'] . $FileName;
                    $UploadedFile->saveAs($path);
                }
 return $this->redirect(['index']);
            }

دیدگاهتان را بنویسید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *