<ruby id="bdb3f"></ruby>

    <p id="bdb3f"><cite id="bdb3f"></cite></p>

      <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
        <p id="bdb3f"><cite id="bdb3f"></cite></p>

          <pre id="bdb3f"></pre>
          <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

          <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
          <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

          <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                <ruby id="bdb3f"></ruby>

                企業??AI智能體構建引擎,智能編排和調試,一鍵部署,支持知識庫和私有化部署方案 廣告
                # 文件上傳 在Yii里上傳文件通常使用yii\web\UploadedFile類, 它把每個上傳的文件封裝成?`UploadedFile`?對象。 結合yii\widgets\ActiveForm和[models](http://www.yiichina.com/doc/guide/2.0/structure-models),你可以輕松實現安全的上傳文件機制。 ## 創建模型 和普通的文本輸入框類似,當要上傳一個文件時,你需要創建一個模型類并且用其中的某個屬性來接收上傳的文件實例。 你還需要聲明一條驗證規則以驗證上傳的文件。 舉例來講, ~~~ namespace app\models; use yii\base\Model; use yii\web\UploadedFile; class UploadForm extends Model { /** * @var UploadedFile */ public $imageFile; public function rules() { return [ [['imageFile'], 'file', 'skipOnEmpty' => false, 'extensions' => 'png, jpg'], ]; } public function upload() { if ($this->validate()) { $this->imageFile->saveAs('uploads/' . $this->imageFile->baseName . '.' . $this->imageFile->extension); return true; } else { return false; } } } ~~~ 在以上代碼里,`imageFile`?屬性用于接收上傳的文件實例。它對應一條`file`?驗證規則, 該規則使用 yii\validators\FileValidator 來確保只上傳擴展名為?`png`?或?`jpg`?的文件。?`upload()`?方法會執行該驗證并且把上傳的文件保存在服務器上。 通過?`file`?驗證器,你可以檢查文件的擴展名,大小,MIME類型等等。詳情請查閱?[Core Validatators](http://www.yiichina.com/doc/guide/2.0/tutorial-core-validators#file)?章節。 >提示: 如果你要上傳的是一張圖片,可以考慮使用`image`驗證器。?`image`?驗證器是通過yii\validators\ImageValidator實現驗證的,確保對應的模型屬性 收到的文件是有效的圖片文件,然后才保存,或者使用擴展類[Imagine Extension](https://github.com/yiisoft/yii2-imagine)進行處理. ## 渲染文件輸入 接下來,在視圖里創建一個文件輸入控件 ~~~ <?php use yii\widgets\ActiveForm; ?> <?php $form = ActiveForm::begin(['options' => ['enctype' => 'multipart/form-data']]) ?> <?= $form->field($model, 'imageFile')->fileInput() ?> <button>Submit</button> <?php ActiveForm::end() ?> ~~~ 需要注意的是要記得在表單選項里加入?`enctype`?屬性以確保文件能被正常上傳。?`fileInput()`?方法會渲染一個?`<input type="file">`?標簽,讓用戶可以選擇一個文件上傳。 ## 視圖和模型的連接 現在,在控制器方法里編寫連接模型和視圖的代碼以實現文件上傳。 ~~~ 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->imageFile = UploadedFile::getInstance($model, 'imageFile'); if ($model->upload()) { // 文件上傳成功 return; } } return $this->render('upload', ['model' => $model]); } } ~~~ 在上面的代碼里,當提交表單的時候,yii\web\UploadedFile::getInstance()方法就被調用, 上傳的文件用一個?`UploadedFile`?實例表示。然后,我們依靠模型的驗證規則確保上傳的文件是有效的, 并將文件保存在服務器上。 ## 上傳多個文件 將前面所述的代碼做一些調整,也可以一次性上傳多個文件。 首先你得調整模型類,在?`file`?驗證規則里增加一個?`maxFiles`?選項,用以限制一次上傳文件的最大數量。?`upload()`方法也得修改, 以便一個一個地保存上傳的文件。 ~~~ namespace app\models; use yii\base\Model; use yii\web\UploadedFile; class UploadForm extends Model { /** * @var UploadedFile[] */ public $imageFiles; public function rules() { return [ [['imageFiles'], 'file', 'skipOnEmpty' => false, 'extensions' => 'png, jpg', 'maxFiles' => 4], ]; } public function upload() { if ($this->validate()) { foreach ($this->imageFiles as $file) { $file->saveAs('uploads/' . $file->baseName . '.' . $file->extension); } return true; } else { return false; } } } ~~~ 在視圖文件里,你需要把?`multiple`?選項添加到`fileInput()`函數調用里, 這樣文件輸入控件就可以接收多個文件。 ~~~ <?php use yii\widgets\ActiveForm; ?> <?php $form = ActiveForm::begin(['options' => ['enctype' => 'multipart/form-data']]) ?> <?= $form->field($model, 'imageFiles[]')->fileInput(['multiple' => true, 'accept' => 'image/*']) ?> <button>Submit</button> <?php ActiveForm::end() ?> ~~~ 最后,在控制器的 action 方法中,你應該調用?`UploadedFile::getInstances()`?而不是?`UploadedFile::getInstance()`?來把`UploadedFile`?實例數組賦值給?`UploadForm::imageFiles`。 ~~~ 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->imageFiles = UploadedFile::getInstances($model, 'imageFiles'); if ($model->upload()) { // 文件上傳成功 return; } } return $this->render('upload', ['model' => $model]); } } ~~~
                  <ruby id="bdb3f"></ruby>

                  <p id="bdb3f"><cite id="bdb3f"></cite></p>

                    <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
                      <p id="bdb3f"><cite id="bdb3f"></cite></p>

                        <pre id="bdb3f"></pre>
                        <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

                        <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
                        <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

                        <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                              <ruby id="bdb3f"></ruby>

                              哎呀哎呀视频在线观看