Yii - Dateien hochladen

Mit Hilfe von können Sie ganz einfach eine Funktion zum Hochladen von Dateien implementieren yii\web\UploadedFile, models und yii\widgets\ActiveForm.

Erstellen Sie ein Verzeichnis ‘uploads’im Stammordner. Dieses Verzeichnis enthält alle hochgeladenen Bilder. Um eine einzelne Datei hochzuladen, müssen Sie ein Modell und ein Attribut des Modells für die hochgeladene Dateiinstanz erstellen. Sie sollten auch den Datei-Upload überprüfen.

Step 1 - In der models Ordner, erstellen Sie eine Datei mit dem Namen UploadImageForm.php mit folgendem Inhalt.

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

Das imageDas Attribut wird verwendet, um die Dateiinstanz beizubehalten. Dasfile Die Validierungsregel stellt sicher, dass eine Datei eine hat png oder ein jpgErweiterung. Die Upload- Funktion überprüft die Datei und speichert sie auf dem Server.

Step 2 - Fügen Sie nun die hinzu actionUploadImage Funktion zum 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 - Wenn das Formular gesendet wird, rufen wir die yii\web\UploadedFile::getInstance() Funktion zur Darstellung der hochgeladenen Datei als UploadedFileBeispiel. Anschließend validieren wir die Datei und speichern sie auf dem Server.

Step 4 - Erstellen Sie als Nächstes eine upload.php Datei innerhalb der anzeigen views/site Verzeichnis.

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

Denken Sie daran, die hinzuzufügen enctype Option, wenn Sie eine Datei hochladen. The fileInput() Methode rendert den folgenden HTML-Code -

<input type = "file">

Mit dem obigen HTML-Code können Benutzer Dateien auswählen und hochladen.

Step 5 - Nun, wenn du gehst http://localhost:8080/index.php?r=site/upload-imagesehen Sie folgendes.

Step 6- Wählen Sie ein Bild zum Hochladen aus und klicken Sie auf die Schaltfläche "Senden". Die Datei wird auf dem Server im gespeichert‘uploads’ Mappe.