Un exemple de Yii2 utilisant des formulaires pour télécharger des fichiers

巴扎黑
Libérer: 2023-03-15 08:42:01
original
1589 Les gens l'ont consulté

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 et jetons un coup d'œil.

Yii2 est souvent utilisé pour télécharger des fichiers via des formulaires. Comment les télécharger ?

1. Téléchargement d'un seul fichier

Créez d'abord un modèle models/UploadForm.php avec le contenu suivant


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'],
    ];
  }
}
Copier après la connexion

Créez un autre fichier de vue avec le contenu suivant


<?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() ?>
Copier après la connexion

Enfin, créez un fichier de contrôleur avec le contenu suivant


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]);
  }
}
Copier après la connexion

Notez que nous n'avons pas utilisé model->load(...), mais 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.

Certaines options de configuration facultatives

Le fichier téléchargé ne peut pas être vide


public function rules()
{
  return [
    [[&#39;file&#39;], &#39;file&#39;, &#39;skipOnEmpty&#39; => false],
  ];
}
Copier après la connexion

Type de téléchargement, non seulement basé sur La vérification de l'extension peut également être vérifiée en fonction du contenu du fichier


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

Modèle :


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!
    ];
  }
}
Copier après la connexion

Afficher :


<?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(); ?>
Copier après la connexion

La différence avec le téléchargement d'un seul fichier est la phrase suivante


$form->field($model, &#39;file[]&#39;)->fileInput([&#39;multiple&#39; => true])
Copier après la connexion

Contrôleur :


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]);
  }
}
Copier après la connexion

De cette façon, vous pouvez télécharger plusieurs fichiers.

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!

Étiquettes associées:
source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal