Yii2使用表单上传文件的实例代码


Posted in PHP onAugust 03, 2017

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(...)。区别是后者不会执行$model->validate(),所以需要手动的去执行$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、多文件上传

如果你想一次上传多个文件,只需调节几个参数就可以达到目的

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

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

PHP 相关文章推荐
PHP开发文件系统实例讲解
Oct 09 PHP
DISCUZ 分页代码
Jan 02 PHP
php cookie 作用范围?不要在当前页面使用你的cookie
Mar 24 PHP
php实现memcache缓存示例讲解
Dec 04 PHP
destoon会员注册提示“数据校验失败(2)”解决方法
Jun 21 PHP
PHP实现绘制3D扇形统计图及图片缩放实例
Oct 01 PHP
PHP获取Exif缩略图的方法
Jul 13 PHP
PHP进程通信基础之信号量与共享内存通信
Feb 19 PHP
iis6手工创建网站后无法运行php脚本的解决方法
Jun 08 PHP
php下载远程大文件(获取远程文件大小)的实例
Jun 17 PHP
PHP的mysqli_select_db()函数讲解
Jan 23 PHP
Smarty模板语法详解
Jul 20 PHP
yii2学习教程之5种内置行为类详解
Aug 03 #PHP
PHP实现的简单在线计算器功能示例
Aug 02 #PHP
利用php操作memcache缓存的基础方法示例
Aug 02 #PHP
Yii 2.0实现联表查询加搜索分页的方法示例
Aug 02 #PHP
YII框架中使用memcache的方法详解
Aug 02 #PHP
PHP编程获取图片的主色调的方法【基于Imagick扩展】
Aug 02 #PHP
php7安装mongoDB扩展的方法分析
Aug 02 #PHP
You might like
php实现根据字符串生成对应数组的方法
2014/09/22 PHP
php从给定url获取文件扩展名的方法
2015/03/14 PHP
实现PHP搜索加分页
2016/10/12 PHP
PHP二维数组去重实例分析
2016/11/18 PHP
Laravel validate error处理,ajax,json示例
2019/10/25 PHP
javascript css在IE和Firefox中区别分析
2009/02/18 Javascript
JavaScript的public、private和privileged模式
2009/12/28 Javascript
菜鸟学习JavaScript小实验之函数引用
2010/11/17 Javascript
js的表单操作 简单计算器
2011/12/29 Javascript
jQuery元素的隐藏与显示实例
2015/01/20 Javascript
浅谈javascript语法和定时函数
2015/05/03 Javascript
详解Angular的双向数据绑定(MV-VM)
2016/12/26 Javascript
Angular.js去除页面中显示的空行方法示例
2017/03/30 Javascript
python实现绘制树枝简单示例
2014/07/24 Python
实例说明Python中比较运算符的使用
2015/05/13 Python
Python中time模块与datetime模块在使用中的不同之处
2015/11/24 Python
Python使用cookielib模块操作cookie的实例教程
2016/07/12 Python
python基础之入门必看操作
2017/07/26 Python
Python实现翻转数组功能示例
2018/01/12 Python
使用Django和Python创建Json response的方法
2018/03/26 Python
对python3 urllib包与http包的使用详解
2018/05/10 Python
pip安装时ReadTimeoutError的解决方法
2018/06/12 Python
Python 多线程不加锁分块读取文件的方法
2018/12/11 Python
解析Python3中的Import
2019/10/13 Python
TensorFlow2.X使用图片制作简单的数据集训练模型
2020/04/08 Python
基于python的opencv图像处理实现对斑马线的检测示例
2020/11/29 Python
CSS3制作hover下划线动画
2017/03/27 HTML / CSS
基于第一个PhoneGap(cordova)的应用详解
2013/05/03 HTML / CSS
波兰在线体育用品商店:Hop-Sport.pl
2019/07/23 全球购物
Book Depository美国:全球领先的专业网上书店之一
2019/08/14 全球购物
应届毕业生应聘自荐信
2013/12/07 职场文书
公司培训心得体会
2014/01/03 职场文书
工作过失检讨书
2014/02/23 职场文书
2014年最新离婚协议书范本
2014/10/11 职场文书
2015年党支部书记工作总结
2015/05/21 职场文书
简单聊聊Golang中defer预计算参数
2022/03/25 Golang