Учебники

Yii — Загрузка файлов

Вы можете легко реализовать функцию загрузки файлов с помощью yii \ web \ UploadedFile, models и yii \ widgets \ ActiveForm .

Создайте каталог ‘uploads’ в корневой папке. В этом каталоге будут храниться все загруженные изображения. Чтобы загрузить один файл, вам нужно создать модель и атрибут модели для экземпляра загруженного файла. Вы также должны подтвердить загрузку файла.

Шаг 1 — Внутри папки моделей создайте файл с именем UploadImageForm.php со следующим содержимым.

<?php
   namespace app\models;
   use yii\base\Model;
   class UploadImageForm extends Model {
      public $image;
      public function rules() {
         return [
            [['image'], 'file', 'skipOnEmpty' => false, 'extensions' => 'jpg, png'],
         ];
      }
      public function upload() {
         if ($this->validate()) {
            $this->image->saveAs('../uploads/' . $this->image->baseName . '.' .
               $this->image->extension);
            return true;
         } else {
            return false;
         }
      }
   }
?>

Атрибут image используется для хранения экземпляра файла. Правило проверки файла гарантирует, что файл имеет расширение PNG или JPG . Функция загрузки проверяет файл и сохраняет его на сервере.

Шаг 2 — Теперь добавьте функцию actionUploadImage в SiteController .

public function actionUploadImage() {
   $model = new UploadImageForm();
   if (Yii::$app->request->isPost) {
      $model->image = UploadedFile::getInstance($model, 'image');
      if ($model->upload()) {
         // file is uploaded successfully
         echo "File successfully uploaded";
         return;
      }
   }
   return $this->render('upload', ['model' => $model]);
}

Шаг 3 — Когда форма отправлена, мы вызываем функцию yii \ web \ UploadedFile :: getInstance (), чтобы представить загруженный файл как экземпляр UploadedFile . Затем мы проверяем файл и сохраняем его на сервере.

Шаг 4 — Затем создайте файл представления upload.php в каталоге views / site .

<?php
   use yii\widgets\ActiveForm;
?>
<?php $form = ActiveForm::begin(['options' => ['enctype' => 'multipart/form-data']])?>
<?= $form->field($model, 'image')->fileInput() ?>
   <button>Submit</button>
<?php ActiveForm::end() ?>

Не забудьте добавить опцию enctype при загрузке файла. Метод fileInput () отображает следующий HTML-код —

<input type = "file">

Приведенный выше HTML-код позволяет пользователям выбирать и загружать файлы.

Шаг 5 — Теперь, если вы перейдете на http: // localhost: 8080 / index.php? R = site / upload-image , вы увидите следующее.

Выберите Загрузить файлы

Шаг 6 — Выберите изображение для загрузки и нажмите кнопку «Отправить». Файл будет сохранен на сервере внутри папки «uploads» .