Ein Beispiel dafür, wie Yii2 Formulare zum Hochladen von Dateien verwendet

巴扎黑
Freigeben: 2023-03-15 08:42:01
Original
1591 Leute haben es durchsucht

In diesem Artikel wird hauptsächlich der Beispielcode von Yii2 vorgestellt, der Formulare zum Hochladen von Dateien verwendet. Der Herausgeber findet ihn recht gut, daher werde ich ihn jetzt mit Ihnen teilen und als Referenz verwenden. Folgen wir dem Editor und werfen wir einen Blick darauf.

Yii2 wird häufig zum Hochladen von Dateien über Formulare verwendet.

1. Einzeldatei-Upload

Erstellen Sie zunächst ein Modell models/UploadForm.php mit folgendem Inhalt


namespace app\models;

use yii\base\Model;
use yii\web\UploadedFile;

/**
 * UploadForm is the model behind the upload form.
 */
class UploadForm extends Model
{
  /**
   * @var UploadedFile file attribute
   */
  public $file;

  /**
   * @return array the validation rules.
   */
  public function rules()
  {
    return [
      [['file'], 'file'],
    ];
  }
}
Nach dem Login kopieren

Erstellen Sie eine Ansichtsdatei mit folgendem Inhalt


<?php
use yii\widgets\ActiveForm;
?>

<?php $form = ActiveForm::begin([&#39;options&#39; => [&#39;enctype&#39; => &#39;multipart/form-data&#39;]]) ?>

<?= $form->field($model, &#39;file&#39;)->fileInput() ?>

<button>Submit</button>

<?php ActiveForm::end() ?>
Nach dem Login kopieren

Erstellen Sie schließlich eine Controller-Datei mit folgendem Inhalt


namespace app\controllers;

use Yii;
use yii\web\Controller;
use app\models\UploadForm;
use yii\web\UploadedFile;

class SiteController extends Controller
{
  public function actionUpload()
  {
    $model = new UploadForm();

    if (Yii::$app->request->isPost) {
      $model->file = UploadedFile::getInstance($model, &#39;file&#39;);

      if ($model->file && $model->validate()) {        
        $model->file->saveAs(&#39;uploads/&#39; . $model->file->baseName . &#39;.&#39; . $model->file->extension);
      }
    }

    return $this->render(&#39;upload&#39;, [&#39;model&#39; => $model]);
  }
}
Nach dem Login kopieren

Beachten Sie, dass wir nicht model->load(...), sondern UploadedFile::getInstance(...) verwendet haben. Der Unterschied besteht darin, dass letzteres $model->validate() nicht ausführt, sodass Sie $model->validate() manuell ausführen müssen, um die Gültigkeit der Daten zu überprüfen. Wenn die Überprüfung erfolgreich ist, wird die hochgeladene Datei im Upload-Ordner gespeichert, d. h. Uploads im Webverzeichnis.

Einige optionale Konfigurationsoptionen

Die hochgeladene Datei darf nicht leer sein


public function rules()
{
  return [
    [[&#39;file&#39;], &#39;file&#39;, &#39;skipOnEmpty&#39; => false],
  ];
}
Nach dem Login kopieren

Upload-Typ, nicht nur basierend auf Die Erweiterungsprüfung kann auch anhand des Inhalts der Datei überprüft werden


public function rules()
{
  return [
    [[&#39;file&#39;], &#39;file&#39;, &#39;extensions&#39; => &#39;jpg, png&#39;, &#39;mimeTypes&#39; => &#39;image/jpeg, image/png&#39;,],
  ];
}
Nach dem Login kopieren

2. Mehrfacher Datei-Upload

Wenn Sie mehrere Dateien gleichzeitig hochladen möchten, müssen Sie nur wenige Parameter anpassen, um das Ziel zu erreichen

Modell:


class UploadForm extends Model
{
  /**
   * @var UploadedFile|Null file attribute
   */
  public $file;

  /**
   * @return array the validation rules.
   */
  public function rules()
  {
    return [
      [[&#39;file&#39;], &#39;file&#39;, &#39;maxFiles&#39; => 10], // <--- here!
    ];
  }
}
Nach dem Login kopieren

Ansicht:


<?php
use yii\widgets\ActiveForm;

$form = ActiveForm::begin([&#39;options&#39; => [&#39;enctype&#39; => &#39;multipart/form-data&#39;]]);
?>

<?= $form->field($model, &#39;file[]&#39;)->fileInput([&#39;multiple&#39; => true]) ?>

  <button>Submit</button>

<?php ActiveForm::end(); ?>
Nach dem Login kopieren

Der Unterschied zum Hochladen einer einzelnen Datei ist der folgende Satz


$form->field($model, &#39;file[]&#39;)->fileInput([&#39;multiple&#39; => true])
Nach dem Login kopieren

Controller:


namespace app\controllers;

use Yii;
use yii\web\Controller;
use app\models\UploadForm;
use yii\web\UploadedFile;

class SiteController extends Controller
{
  public function actionUpload()
  {
    $model = new UploadForm();

    if (Yii::$app->request->isPost) {
      $model->file = UploadedFile::getInstances($model, &#39;file&#39;);

      if ($model->file && $model->validate()) {
        foreach ($model->file as $file) {
          $file->saveAs(&#39;uploads/&#39; . $file->baseName . &#39;.&#39; . $file->extension);
        }
      }
    }

    return $this->render(&#39;upload&#39;, [&#39;model&#39; => $model]);
  }
}
Nach dem Login kopieren

Auf diese Weise können Sie mehrere Dateien hochladen.

Das obige ist der detaillierte Inhalt vonEin Beispiel dafür, wie Yii2 Formulare zum Hochladen von Dateien verwendet. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Verwandte Etiketten:
Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage