برای آپلود فایل به صورت زیر عمل می کنیم.
ابتدا مدل:
ستونی که من در دیتابیس برای ذخیره تصویر در نظر گرفته ام 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']); }