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(['options' => ['enctype' => 'multipart/form-data']]) ?> <?= $form->field($model, 'file')->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, 'file'); if ($model->file && $model->validate()) { $model->file->saveAs('uploads/' . $model->file->baseName . '.' . $model->file->extension); } } return $this->render('upload', ['model' => $model]); } }
ここでは、model->load(...) を使用せず、UploadedFile::getInstance(...) を使用していることに注意してください。違いは、後者は $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(['options' => ['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 中国語 Web サイト をご覧ください。 !
以上がyii2 にファイルをアップロードするにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。