Yii - Carga de archivos

Puede implementar fácilmente una función de carga de archivos con la ayuda de yii\web\UploadedFile, models y yii\widgets\ActiveForm.

Crea un directorio ‘uploads’en la carpeta raíz. Este directorio contendrá todas las imágenes cargadas. Para cargar un solo archivo, debe crear un modelo y un atributo del modelo para la instancia del archivo cargado. También debe validar la carga del archivo.

Step 1 - Dentro del models carpeta, cree un archivo llamado UploadImageForm.php con el siguiente contenido.

<?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;
         }
      }
   }
?>

los imageEl atributo se usa para mantener la instancia del archivo. losfile La regla de validación asegura que un archivo tiene un png o un jpgextensión. La función de carga valida el archivo y lo guarda en el servidor.

Step 2 - Ahora, agregue el actionUploadImage función a la 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]);
}

Step 3 - Cuando se envía el formulario, llamamos al yii\web\UploadedFile::getInstance() función para representar el archivo cargado como un UploadedFileejemplo. Luego, validamos el archivo y lo guardamos en el servidor.

Step 4 - A continuación, cree un upload.php ver archivo dentro del views/site directorio.

<?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() ?>

Recuerde agregar el enctype opción cuando carga un archivo. The fileInput() El método muestra el siguiente código html:

<input type = "file">

El código html anterior permite a los usuarios seleccionar y cargar archivos.

Step 5 - Ahora, si vas a http://localhost:8080/index.php?r=site/upload-image, verá lo siguiente.

Step 6- Seleccione una imagen para cargar y haga clic en el botón "enviar". El archivo se guardará en el servidor dentro del‘uploads’ carpeta.