ホームページ  >  記事  >  バックエンド開発  >  フォームを使用してファイルをアップロードする Yii2 の例

フォームを使用してファイルをアップロードする Yii2 の例

巴扎黑
巴扎黑オリジナル
2017-08-15 13:15:321526ブラウズ

この記事では、フォームを使用してファイルをアップロードする Yii2 のサンプルコードを主に紹介します。編集者が非常に優れていると考えたので、参考として共有します。エディターに従って、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; => [&#39;enctype&#39; => &#39;multipart/form-data&#39;]]) ?>

<?= $form->field($model, &#39;file&#39;)->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, &#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]);
  }
}

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

いくつかのオプションの構成オプション


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

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

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

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

Model:

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

View:

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

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

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

この方法で複数のファイルをアップロードすることができます。

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

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