Yii2使用表單上傳文件的實例代碼
yii2用表單上傳文件經(jīng)常用到的,該怎樣上傳呢?
1、單個文件上傳
首先建立一個模型models/UploadForm.php,內(nèi)容如下
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'],
];
}
}
再建立一個視圖文件,內(nèi)容如下
<?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() ?>
最后建立控制器文件,內(nèi)容如下
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()來檢驗數(shù)據(jù)的合法性。如果檢驗通過了,上傳的文件保存在uploads文件夾下,即web目錄下的uploads里。
一些可選的配置選項
上傳文件不能為空
public function rules()
{
return [
[['file'], 'file', 'skipOnEmpty' => false],
];
}
上傳類型,不僅可以根據(jù)擴展名檢驗,還可以根據(jù)文件的內(nèi)容進行檢驗
public function rules()
{
return [
[['file'], 'file', 'extensions' => 'jpg, png', 'mimeTypes' => 'image/jpeg, image/png',],
];
}
2、多文件上傳
如果你想一次上傳多個文件,只需調(diào)節(jié)幾個參數(shù)就可以達到目的
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]);
}
}
這樣就可以實現(xiàn)多文件上傳了。
參考https://github.com/yiisoft/yii2/blob/master/docs/guide/input-file-upload.md
以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
- Yii2使用自帶的UploadedFile實現(xiàn)的文件上傳
- Yii2組件之多圖上傳插件FileInput的詳細使用教程
- yii2整合百度編輯器umeditor及umeditor圖片上傳問題的解決辦法
- Yii2實現(xiàn)ajax上傳圖片插件用法
- yii2利用自帶UploadedFile實現(xiàn)上傳圖片的示例
- yii2 上傳圖片的示例代碼
- yii2高級應(yīng)用之自定義組件實現(xiàn)全局使用圖片上傳功能的方法
- Yii2.0使用阿里云OSS的SDK上傳圖片、下載、刪除圖片示例
- yii2.0整合阿里云oss上傳單個文件的示例
- Yii2.0多文件上傳實例說明
- yii2多圖上傳組件的使用教程
- YII2框架實現(xiàn)表單中上傳單個文件的方法示例
相關(guān)文章
Symfony2實現(xiàn)在doctrine中內(nèi)置數(shù)據(jù)的方法
這篇文章主要介紹了Symfony2實現(xiàn)在doctrine中內(nèi)置數(shù)據(jù)的方法,結(jié)合實例形式分析了在doctrine中內(nèi)置數(shù)據(jù)的具體步驟與相關(guān)技巧,需要的朋友可以參考下2016-02-02
基于AppServ,XAMPP,WAMP配置php.ini去掉警告信息(NOTICE)的方法詳解
本篇文章是對AppServ,XAMPP,WAMP配置php.ini去掉警告信息(NOTICE)的方法進行了詳細的分析介紹,需要的朋友參考下2013-05-05
layui框架實現(xiàn)文件上傳及TP3.2.3(thinkPHP)對上傳文件進行后臺處理操作示例
這篇文章主要介紹了layui框架實現(xiàn)文件上傳及TP3.2.3對上傳文件進行后臺處理操作,結(jié)合實例形式分析了layui框架結(jié)合thinkPHP進行文件上傳與處理操作相關(guān)實現(xiàn)技巧,需要的朋友可以參考下2018-05-05
Zend Framework入門教程之Zend_Mail用法示例
這篇文章主要介紹了Zend Framework中Zend_Mail用法,結(jié)合實例形式分析了Zend Framework中Zend_Mail組件的功能、使用步驟與相關(guān)操作技巧,需要的朋友可以參考下2016-12-12
Laravel關(guān)聯(lián)模型中過濾結(jié)果為空的結(jié)果集(has和with區(qū)別)
這篇文章主要介紹了Laravel關(guān)聯(lián)模型中過濾結(jié)果為空的結(jié)果集(has和with區(qū)別),需要的朋友可以參考下2018-10-10

