Heim >Backend-Entwicklung >PHP-Tutorial >Yii2 implementiert die Funktion zum Hochladen von Formulardateien
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 Herausgeber und schauen wir uns das an. Ich hoffe, es kann allen helfen.
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 dann eine Ansichtsdatei mit folgendem Inhalt
<?php use yii\widgets\ActiveForm; ?> <?php $form = ActiveForm::begin(['options' => ['enctype' => 'multipart/form-data']]) ?> <?= $form->field($model, 'file')->fileInput() ?> <button>Submit</button> <?php ActiveForm::end() ?>
Erstellen Sie abschließend die Controller-Datei. Der Inhalt lautet wie folgt
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, 'file'); if ($model->file && $model->validate()) { $model->file->saveAs('uploads/' . $model->file->baseName . '.' . $model->file->extension); } } return $this->render('upload', ['model' => $model]); } }
Beachten Sie, dass wir hier nicht model->load(...) verwendet haben, sondern 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 [ [['file'], 'file', 'skipOnEmpty' => false], ]; }
Der Upload-Typ kann nicht nur anhand der Erweiterung, sondern auch anhand der Datei überprüft werden auf den Inhalt der Datei prüfen
public function rules() { return [ [['file'], 'file', 'extensions' => 'jpg, png', 'mimeTypes' => 'image/jpeg, image/png',], ]; }
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 [ [['file'], 'file', 'maxFiles' => 10], // <--- here! ]; } }
Ansicht:
<?php use yii\widgets\ActiveForm; $form = ActiveForm::begin(['options' => ['enctype' => 'multipart/form-data']]); ?> <?= $form->field($model, 'file[]')->fileInput(['multiple' => true]) ?> <button>Submit</button> <?php ActiveForm::end(); ?>
Der Unterschied zum Hochladen einer einzelnen Datei ist der folgende Satz
$form->field($model, 'file[]')->fileInput(['multiple' => 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, 'file'); if ($model->file && $model->validate()) { foreach ($model->file as $file) { $file->saveAs('uploads/' . $file->baseName . '.' . $file->extension); } } } return $this->render('upload', ['model' => $model]); } }
Auf diese Weise können mehrere Dateien hochgeladen werden.
Verwandte Empfehlungen:
PHP und AjaxForm implementieren asynchronen Datei-Upload mit Fortschrittsbalken
Ajax-Formular zum Hochladen von asynchronen Dateien Beispielcode, detaillierte Erklärung
Das obige ist der detaillierte Inhalt vonYii2 implementiert die Funktion zum Hochladen von Formulardateien. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!