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(['options' => ['enctype' => 'multipart/form-data']]) ?> <?= $form->field($model, 'file')->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, '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(...)。區(qū)別是后者不會執(zhí)行$model->validate(),所以需要手動的去執(zhí)行$model->validate()來檢驗數據的合法性。如果檢驗通過了,上傳的文件保存在uploads文件夾下,即web目錄下的uploads里。
一些可選的配置選項
上傳文件不能為空
public function rules() { return [ [['file'], 'file', 'skipOnEmpty' => false], ]; }
上傳類型,不僅可以根據擴展名檢驗,還可以根據文件的內容進行檢驗
public function rules() { return [ [['file'], 'file', 'extensions' => 'jpg, png', 'mimeTypes' => 'image/jpeg, image/png',], ]; }
2、多文件上傳
如果你想一次上傳多個文件,只需調節(jié)幾個參數就可以達到目的
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]); } }
這樣就可以實現多文件上傳了。
參考https://github.com/yiisoft/yii2/blob/master/docs/guide/input-file-upload.md
以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持腳本之家。
相關文章
Laravel 5.4中migrate報錯: Specified key was too long error的解決
今天在執(zhí)行l(wèi)aravel migrate時出現異常,找了好半天才找到問題所在,所以這篇文章主要給大家介紹了關于Laravel 5.4中migrate報錯: Specified key was too long error的解決方法,需要的朋友可以參考下。2017-11-11Kindeditor編輯器添加圖片上傳水印功能(php代碼)
這篇文章主要為大家詳細介紹了Kindeditor編輯器加圖片上傳水印功能,具有一定的參考價值,感興趣的小伙伴們可以參考一下2017-08-08Laravel使用Caching緩存數據減輕數據庫查詢壓力的方法
這篇文章主要介紹了Laravel使用Caching緩存數據減輕數據庫查詢壓力的方法,以項目實例形式較為詳細的分析了Laravel框架使用Caching緩存的原理與具體實現技巧,需要的朋友可以參考下2016-03-03php分頁思路以及在Zend?Framework框架中的使用
php分頁思路以及在Zend?Framework框架中的使用,需要的朋友可以參考下2012-05-05