Heim  >  Artikel  >  Backend-Entwicklung  >  Wie lade ich Dateien in yii2 hoch?

Wie lade ich Dateien in yii2 hoch?

巴扎黑
巴扎黑Original
2017-08-17 08:13:595105Durchsuche

Wie lade ich Dateien in yii2 hoch?

Yii2 UploadedFile implementiert das Hochladen von Dateien

Um Dateien in Yii hochzuladen, verwenden Sie normalerweise die Klasse yiiwebUploadedFile, die hochlädt jede Datei Die Datei ist in ein UploadedFile-Objekt gekapselt. Durch die Kombination von yiiwidgetsActiveForm und Modellen können Sie ganz einfach einen sicheren Datei-Upload-Mechanismus implementieren.

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'],
        ];
    }
}

Erstellen Sie eine weitere 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() ?>

Schließlich erstellen Sie 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]);
    }
}

Beachten Sie, dass wir kein Model->load verwenden (.. .), verwenden Sie stattdessen UploadedFile::getInstance(...). 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],
    ];
}

Der Upload-Typ kann nicht nur anhand der Erweiterung, sondern 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;,],
    ];
}

2. Mehrere Dateien hochladen

Wenn Sie mehrere Dateien gleichzeitig hochladen möchten, müssen Sie nur ein paar 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!
        ];
    }
}

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

Der Unterschied zum Hochladen einer einzelnen Datei ist der folgende Satz

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

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]);
    }
}

Auf diese Weise können mehrere Dateien hochgeladen werden.

Weitere Informationen zu diesem Thema finden Sie auf der PHP-Website für Chinesisch! !

Das obige ist der detaillierte Inhalt vonWie lade ich Dateien in yii2 hoch?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
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