针对于YII2.0官方手册来讲,我稍微修改了一些内容具体的就是把model层里定义的uoload方法在controller方法里合并了php
namespace app\models;
web
use yii\base\Model;
app
use yii\web\UploadedFile;
yii
class UploadForm extends Model{
this
public $imageFile;//定义一个公用的名称
spa
public function rules() {
code
return [ [['imageFile'], 'file', 'skipOnEmpty' => false, 'extensions' => 'png, jpg'], ];//extensions 这边报错的话就把这个设置关闭(删除后缀代码就行了)
orm
}
ip
}
get
接下来,在视图里建立一个文件输入控件
<?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() ?>
如今,在控制器方法里编写链接模型和视图的代码以实现文件上传。
namespace app\controllers;
//须要本身手动建立uploads文件夹 建立在web访问目录下就ok了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()$model->validata()) {//这点就是改变的所在
$model->file->saveAs('uploads/'.$model->file->baseName.'.'.$model->file->extension); // 文件上传成功 return; } } return $this->render('upload', ['model' => $model]); } }
恭喜你已经学会YII2.0中的上传了
扩展::《多文件上传》
若是你想一次上传多个文件,只需调节几个参数就能够达到目的
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]); } }