Yii - Caricamento di file

Puoi facilmente implementare una funzione di caricamento di file con l'aiuto di yii\web\UploadedFile, models e yii\widgets\ActiveForm.

Crea una directory ‘uploads’nella cartella principale. Questa directory conterrà tutte le immagini caricate. Per caricare un singolo file, è necessario creare un modello e un attributo del modello per l'istanza del file caricato. Dovresti anche convalidare il caricamento del file.

Step 1 - All'interno del models cartella, crea un file chiamato UploadImageForm.php con il seguente contenuto.

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

Il imagel'attributo viene utilizzato per mantenere l'istanza del file. Ilfile la regola di convalida garantisce che un file abbia l'estensione png o a jpgestensione. La funzione di caricamento convalida il file e lo salva sul server.

Step 2 - Ora aggiungi il file actionUploadImage funzione al 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 - Quando il modulo viene inviato, chiamiamo yii\web\UploadedFile::getInstance() funzione per rappresentare il file caricato come un UploadedFileesempio. Quindi, convalidiamo il file e lo salviamo sul server.

Step 4 - Quindi, crea un file upload.php visualizza il file all'interno del views/site directory.

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

Ricordati di aggiungere il file enctype opzione quando carichi un file. The fileInput() metodo esegue il rendering del seguente codice html -

<input type = "file">

Il codice html di cui sopra consente agli utenti di selezionare e caricare file.

Step 5 - Ora, se vai a http://localhost:8080/index.php?r=site/upload-image, vedrai quanto segue.

Step 6- Seleziona un'immagine da caricare e fai clic sul pulsante "Invia". Il file verrà salvato sul server all'interno del file‘uploads’ cartella.