Cet article présente principalement l'exemple de code de Yii2 utilisant des formulaires pour télécharger des fichiers. L'éditeur pense que c'est plutôt bon, je vais donc le partager avec vous maintenant et le donner comme référence. Suivons l'éditeur pour y jeter un œil, j'espère que cela pourra aider tout le monde.
1. Téléchargement d'un seul fichier
Créez d'abord un modèle models/UploadForm.php avec le contenu suivant
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 | namespace app\models;
use yii\base\Model;
use yii\web\UploadedFile;
class UploadForm extends Model
{
public $file ;
public function rules()
{
return [
[[ 'file' ], 'file' ],
];
}
}
|
Copier après la connexion
Créez ensuite un fichier de vue avec le contenu suivant
1 2 3 4 5 6 7 8 9 10 11 | <?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 () ?>
|
Copier après la connexion
Créez enfin le fichier du contrôleur, le contenu est le suivant
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 | 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 ]);
}
}
|
Copier après la connexion
Notez que nous n'avons pas utilisé model->load(...) ici, mais utilisé UploadedFile : getInstance(... ). La différence est que ce dernier n'exécutera pas $model->validate(), vous devez donc exécuter manuellement $model->validate() pour vérifier la validité des données. Si la vérification réussit, le fichier téléchargé est enregistré dans le dossier des téléchargements, c'est-à-dire des téléchargements dans le répertoire Web.
Quelques options de configuration facultatives
Le fichier téléchargé ne peut pas être vide
1 2 3 4 5 6 | public function rules()
{
return [
[[ 'file' ], 'file' , 'skipOnEmpty' => false],
];
}
|
Copier après la connexion
Le type de téléchargement peut être vérifié non seulement en fonction de l'extension, mais également en fonction sur le fichier Vérifier le contenu
1 2 3 4 5 6 | public function rules()
{
return [
[[ 'file' ], 'file' , 'extensions' => 'jpg, png' , 'mimeTypes' => 'image/jpeg, image/png' ,],
];
}
|
Copier après la connexion
2. Téléchargement de plusieurs fichiers
Si vous souhaitez télécharger plusieurs fichiers à la fois, il vous suffit d'ajuster quelques paramètres pour atteindre l'objectif
2. 🎜>
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 | class UploadForm extends Model
{
public $file ;
public function rules()
{
return [
[[ 'file' ], 'file' , 'maxFiles' => 10],
];
}
}
|
Copier après la connexion
Modèle :
1 2 3 4 5 6 7 8 9 10 11 | <?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 (); ?>
|
Copier après la connexion
Vue :
1 | $form ->field( $model , 'file[]' )->fileInput([ 'multiple' => true])
|
Copier après la connexion
La différence avec le téléchargement d'un fichier unique est la phrase suivante
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 | 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 ]);
}
}
|
Copier après la connexion
Contrôleur :
De cette façon, plusieurs fichiers peuvent être téléchargés.
Recommandations associées :
PHP et AjaxForm implémentent le téléchargement de fichiers asynchrone avec barre de progression
plug-in jQuery ajaxupload- en implémentation Explication détaillée du téléchargement de fichiers sans actualisation
Explication détaillée du code d'exemple de téléchargement de fichier asynchrone du formulaire Ajax
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!