ホームページ  >  記事  >  バックエンド開発  >  yii2 にファイルをアップロードするにはどうすればよいですか?

yii2 にファイルをアップロードするにはどうすればよいですか?

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

yii2 にファイルをアップロードするにはどうすればよいですか?

Yii2 UploadFile はファイルのアップロードを実装します

Yii でファイルをアップロードするには、通常、アップロードされた各ファイルを UploadFile オブジェクトにカプセル化する yiiwebUploadedFile クラスを使用します。 yiiwidgetsActiveForm とモデルを組み合わせると、安全なファイル アップロード メカニズムを簡単に実装できます。

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

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

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

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

関連知識の詳細については、PHP 中国語 Web サイト をご覧ください。 !

以上がyii2 にファイルをアップロードするにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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