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 相关文章推荐
PHP5 面向对象程序设计
Feb 13 PHP
用PHP调用Oracle存储过程的方法
Sep 12 PHP
PHP 服务器配置(使用Apache及IIS两种方法)
Jun 01 PHP
PHP面向对象概念
Nov 06 PHP
php变量作用域的深入解析
Jun 03 PHP
PHP打开和关闭文件操作函数总结
Nov 18 PHP
php中smarty区域循环的方法
Jun 11 PHP
PHP会话操作之cookie用法分析
Sep 28 PHP
php rsa 加密,解密,签名,验签详解
Dec 06 PHP
PHP设计模式之注册树模式分析
Jan 26 PHP
php在windows环境下获得cpu内存实时使用率(推荐)
Feb 08 PHP
Cookie跨域问题解决方案代码示例
Nov 24 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
在IIS上安装PHP4.0正式版
2006/10/09 PHP
人尽可用的Windows技巧小贴士之下篇
2007/03/22 PHP
php 获取可变函数参数的函数
2009/08/26 PHP
PHP中创建图像并绘制文字的例子
2014/11/19 PHP
MacOS 安装 PHP的图片裁剪扩展Tclip
2015/03/25 PHP
Linux系统下使用XHProf和XHGui分析PHP运行性能
2015/12/08 PHP
PHP实现递归目录的5种方法
2016/10/27 PHP
php-beanstalkd消息队列类实例分享
2017/07/19 PHP
Array.prototype 的泛型应用分析
2010/04/30 Javascript
JS高级拖动技术 setCapture,releaseCapture
2011/07/31 Javascript
通过JS动态创建一个html DOM元素并显示
2014/10/15 Javascript
简介JavaScript中的setDate()方法的使用
2015/06/11 Javascript
JavaScript动态添加css样式和script标签
2016/07/19 Javascript
AngularJs bootstrap搭载前台框架——基础页面
2016/09/01 Javascript
jQuery删除当前节点元素
2016/12/07 Javascript
jQuery实现CheckBox全选、全不选功能
2017/01/11 Javascript
JavaScript原生节点操作小结
2017/01/17 Javascript
canvas绘制七巧板
2017/02/03 Javascript
从零学习node.js之简易的网络爬虫(四)
2017/02/22 Javascript
vue.js指令和组件详细介绍及实例
2017/04/06 Javascript
为你的微信小程序体积瘦身详解
2017/05/20 Javascript
Vue-router的使用和出现空白页,路由对象属性详解
2018/09/03 Javascript
ES6 Object方法扩展的应用实例分析
2019/06/25 Javascript
vuex state中的数组变化监听实例
2019/11/06 Javascript
OpenLayers3实现地图显示功能
2020/09/25 Javascript
[44:40]2018DOTA2亚洲邀请赛3月30日 小组赛A组Liquid VS OG
2018/03/31 DOTA
完美解决Python 2.7不能正常使用pip install的问题
2018/06/12 Python
Jupyter Notebook安装及使用方法解析
2020/11/12 Python
丝芙兰香港官网:Sephora香港
2018/03/13 全球购物
100%植物性、有机、即食餐:Sakara Life
2018/10/25 全球购物
简述安装Slackware Linux系统的过程
2012/05/08 面试题
计算机毕业生求职信
2014/06/10 职场文书
销售督导岗位职责
2015/04/10 职场文书
生活小常识广播稿
2015/08/19 职场文书
护士医德医风心得体会
2016/01/25 职场文书
Django中celery的使用项目实例
2022/07/07 Python