ホームページ  >  記事  >  バックエンド開発  >  Yii2はフォームアップロードファイル機能を実装します

Yii2はフォームアップロードファイル機能を実装します

小云云
小云云オリジナル
2018-01-30 14:01:541967ブラウズ

この記事では、フォームを使用してファイルをアップロードする Yii2 のサンプルコードを主に紹介します。編集者が非常に優れていると考えたので、参考として共有します。編集者をフォローして見てみましょう。皆さんのお役に立てれば幸いです。

1. 単一ファイルのアップロード

まず、次の内容でモデル models/UploadForm.php を作成します

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

次に、次の内容でビュー ファイルを作成します

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

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

<?= $form->field($model, 'file')->fileInput() ?>

<button>Submit</button>

<?php ActiveForm::end() ?>

最後に、次の内容でコントローラー ファイルを作成します

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

ここには何もありません。UploadedFile::getInstance(...) の代わりに model->load(...) を使用してください。違いは、後者は $model->validate() を実行しないため、手動で $model->validate() を実行してデータの有効性をチェックする必要があることです。テストに合格すると、アップロードされたファイルはアップロード フォルダーに保存されます。つまり、Web ディレクトリにアップロードされます。

いくつかのオプションの設定オプション

アップロードされたファイルは空にすることはできません

public function rules()
{
  return [
    [['file'], 'file', 'skipOnEmpty' => false],
  ];
}

アップロードの種類は拡張子だけでなく、ファイルの内容にも基づいてチェックできます

public function rules()
{
  return [
    [['file'], 'file', 'extensions' => 'jpg, png', 'mimeTypes' => 'image/jpeg, image/png',],
  ];
}

2.一度に複数のファイルをアップロードしたい場合は、いくつかのパラメータを調整するだけで目的を達成できます

Model:

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

View:

<?php
use yii\widgets\ActiveForm;

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

<?= $form->field($model, 'file[]')->fileInput(['multiple' => true]) ?>

  <button>Submit</button>

<?php ActiveForm::end(); ?>

単一ファイルのアップロードとの違いは、次の文です

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

これは複数のファイルをアップロードすることで実現できます。


関連する推奨事項:


PHP と AjaxForm はプログレスバー付きの非同期ファイルアップロードを実装します

非リフレッシュアップロードファイルを実装するための jQuery ajaxupload プラグインの詳細な説明

Ajax フォームの非同期ファイルアップロードのサンプルコードの詳細な説明

以上がYii2はフォームアップロードファイル機能を実装しますの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。