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格式化工具Beautify PHP小小BUG
Apr 24 PHP
在Windows下编译适用于PHP 5.2.12及5.2.13的eAccelerator.dll(附下载)
May 04 PHP
PHP JSON 数据解析代码
May 26 PHP
php中将图片gif,jpg或mysql longblob或blob字段值转换成16进制字符串
Aug 23 PHP
用Json实现PHP与JavaScript间数据交换的方法详解
Jun 20 PHP
PHP错误Allowed memory size of 67108864 bytes exhausted的3种解决办法
Jul 28 PHP
PHP中使用GD库创建圆形饼图的例子
Nov 19 PHP
php编写简单的文章发布程序
Jun 18 PHP
php版微信公众平台实现预约提交后发送email的方法
Sep 26 PHP
php获取网站根目录物理路径的几种方法(推荐)
Mar 04 PHP
php+js实现裁剪任意形状图片
Oct 31 PHP
PHP实现常用排序算法的方法
Feb 05 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
织梦模板标记简介
2007/03/11 PHP
PHP实现的MongoDB数据库操作类分享
2014/05/12 PHP
PHP封装的一个支持HTML、JS、PHP重定向的多功能跳转函数
2014/06/19 PHP
PHP ignore_user_abort函数详细介绍和使用实例
2014/07/15 PHP
如何正确配置Nginx + PHP
2016/07/15 PHP
php 使用html5实现多文件上传实例
2016/10/24 PHP
php 查找数组元素提高效率的方法详解
2017/05/05 PHP
php微信支付之公众号支付功能
2018/05/30 PHP
深入document.write()与HTML4.01的非成对标签的详解
2013/05/08 Javascript
JavaScript位移运算符(无符号) &gt;&gt;&gt; 三个大于号 的使用方法详解
2016/03/31 Javascript
浅析jQuery Ajax通用js封装
2016/06/22 Javascript
JS传值出现中文参数乱码的解决方法
2016/06/30 Javascript
js前端实现多图图片上传预览的两个方法(推荐)
2016/11/18 Javascript
js实现简单数字变动效果
2017/11/06 Javascript
详解vuex之store源码简单解析
2019/06/13 Javascript
js blob类型url的视频下载问题的解决
2019/11/29 Javascript
vue实现在进行增删改操作后刷新页面
2020/08/05 Javascript
Python使用wxPython实现计算器
2018/01/30 Python
在Python中实现shuffle给列表洗牌
2018/11/08 Python
Python3.5集合及其常见运算实例详解
2019/05/01 Python
对Python3之方法的覆盖与super函数详解
2019/06/26 Python
使用Django xadmin 实现修改时间选择器为不可输入状态
2020/03/30 Python
golang/python实现归并排序实例代码
2020/08/30 Python
Python爬虫之Selenium实现窗口截图
2020/12/04 Python
印度最大的旅游网站:MakeMyTrip
2016/10/05 全球购物
德国健康生活方式网上商店:Landkaufhaus Mayer
2019/03/12 全球购物
Bata印度官网:源自欧洲舒适鞋履品牌
2020/01/30 全球购物
Columbia Sportswear法国官网:全球户外品牌
2020/09/25 全球购物
介绍一下Linux中的链接
2016/06/05 面试题
自主招生自荐信格式
2013/12/03 职场文书
英文简历自荐信范文
2013/12/11 职场文书
文明宿舍获奖感言
2014/02/07 职场文书
入党群众意见范文
2015/06/02 职场文书
毕业证明模板
2015/06/19 职场文书
2016年安全月活动总结
2016/04/06 职场文书
Python开发之QT解决无边框界面拖动卡屏问题(附带源码)
2021/05/27 Python