在根檔案夾建立一個「uploads」 的上傳目錄。這個目錄將儲存所有上傳的圖片。要上傳一個檔案,需要建立一個模型和模型上傳檔案範例的屬性。還應該驗證檔案上傳。
<?php namespace app\models; use yii\base\Model; class UploadImageForm extends Model { public $image; public function rules() { return [ [['image'], 'file', 'skipOnEmpty' => false, 'extensions' => 'jpg, png'], ]; } public function upload() { if ($this->validate()) { $this->image->saveAs('../uploads/' . $this->image->baseName . '.' . $this->image->extension); return true; } else { return false; } } } ?>
image 屬性用於保持檔案的範例。這裡檔案驗證規則是確保檔案有一個 PNG 或 JPG 格式擴充套件名。upload()函式驗證該檔案並將其儲存在伺服器上。
public function actionUploadImage() { $model = new UploadImageForm(); if (Yii::$app->request->isPost) { $model->image = UploadedFile::getInstance($model, 'image'); if ($model->upload()) { // file is uploaded successfully echo "File successfully uploaded"; return; } } return $this->render('upload', ['model' => $model]); }
第3步 - 當表單提交,呼叫yii\web\UploadedFile::getInstance()函式來表示上傳的檔案作為 UploadedFile 的範例。然後,我們驗證檔案並將其儲存在伺服器上。
<?php use yii\widgets\ActiveForm; ?> <?php $form = ActiveForm::begin(['options' => ['enctype' => 'multipart/form-data']])?> <?= $form->field($model, 'image')->fileInput() ?> <button>Submit</button> <?php ActiveForm::end() ?>
記住上傳檔案時表單頭需要新增 enctype 選項。fileInput() 方法輸出以下HTML程式碼-
<input type = "file">