yii2高级应用之自定义组件实现全局使用图片上传功能的方法


Posted in PHP onOctober 08, 2016

本文讲述了yii2高级应用之自定义组件实现全局使用图片上传功能的方法。分享给大家供大家参考,具体如下:

此例为yii2高组应用,这里只提供一个简单的事例

在yii2中,在使用到上传图片时有自带的一个上传图片类,但不太好用。

其中有一种方式,把自己写的一个上传图片类文件,注册成一个组件,在全局中使用。(我记得我在里面有写过一篇小物件的使用)

这里,我只作一个简单的自定义组件介绍

1、在backend(或frontend)定义一个 upload.php(注意路径: backend/components)

//图片上传处理类(这里略)
//upload.php事例代码
namespace backend\components;
class Upload
{
  public function test(){
    $a = '你好';
    return $a;
  }
}

2、backend/config/main.php 注册刚写的自定义组件

'components' => [
  'imgload' => [
    'class' => 'backend\components\Upload'
  ],
]

3、控制器中如何使用

public function actionArticlelist()
{
  $cc = Yii::$app->imgload->test();
  var_dump($cc);exit;
}

那么,一个完整的图片上传组件这里就不写了。

这里只写了一个使用自定义组件的方法!

还是补进进来吧。

1、自定义组件,便于全局使用。backend/config/main.php

'components' => [
  'user' => [
    'identityClass' => 'common\models\AgMerch',
    'enableAutoLogin' => true,
  ],
  //自定义图片上传类
  'imgload' => [
    'class' => 'agent\components\Upload'
  ],
]

2、自定义图片上传类 backend/components/Upload.php

namespace agent\components;
use yii;
use yii\base\Object;
use yii\web\UploadedFile;
class Upload extends Object
{
  /**
   * [UploadPhoto description]
   * @param [type] $model   [实例化模型]
   * @param [type] $path    [图片存储路径]
   * @param [type] $originName [图片源名称]
   * @param boolean $isthumb  [是否要缩略图]
   */
  public function UploadPhoto($model,$path,$originName,$isthumb=false){
    $root = $_SERVER['DOCUMENT_ROOT'].'/'.$path;
    //返回一个实例化对象
    $files = UploadedFile::getInstance($model,$originName);
    $folder = date('Ymd')."/";
    $pre = rand(999,9999).time();
    if($files && ($files->type == "image/jpeg" || $files->type == "image/pjpeg" || $files->type == "image/png" || $files->type == "image/x-png" || $files->type == "image/gif"))
    {
      $newName = $pre.'.'.$files->getExtension();
    }else{
      die($files->type);
    }
    if($files->size > 2000000){
      die("上传的文件太大");
    }
    if(!is_dir($root.$folder))
    {
      if(!mkdir($root.$folder, 0777, true)){
        die('创建目录失败...');
      }else{
      //  chmod($root.$folder,0777);
      }
    }
    //echo $root.$folder.$newName;exit;
    if($files->saveAs($root.$folder.$newName))
    {
      if($isthumb){
        $this->thumbphoto($files,$path.$folder.$newName,$path.$folder.'thumb'.$newName);
        return $path.$folder.$newName.'#'.$path.$folder.'thumb'.$newName;
      }else{
        return $path.$folder.$newName;
      }
    }
  }
}

3、控制器部分

use backend\components\Upload;
public function actionArtadd(){
  $model = new Article();
  if ($model->load(Yii::$app->request->post())) {
    //cover为表中的字段名
    $img = Yii::$app->imgload->UploadPhoto($model,'uploads/article/','cover');
    $model->cover = $img;//存入表中
    if($model->save()){
      Yii::$app->getSession()->setFlash('info', '添加成功!');
      return $this->redirect(['xxx']);
    }else{
      Yii::$app->getSession()->setFlash('info', '添加失败!');
      @unlink($img);
      return $this->redirect(['xxx']);
    }
  }
  //代码略
}

4、视图 (部分代码)

<?= $form->field($model, 'cover', [
  'options'=>['class'=>''],
  'inputOptions' => ['class' => 'form-control'],
])->fileInput()->label(false); ?>

希望本文所述对大家基于Yii框架的PHP程序设计有所帮助。

PHP 相关文章推荐
MayFish PHP的MVC架构的开发框架
Aug 13 PHP
PHP正确解析UTF-8字符串技巧应用
Nov 07 PHP
PHP之sprintf函数用法详解
Nov 12 PHP
PHP curl CURLOPT_RETURNTRANSFER参数的作用使用实例
Feb 07 PHP
PHP随机生成唯一HASH值自定义函数
Apr 20 PHP
详解PHP实现执行定时任务
Dec 21 PHP
phpcms中的评论样式修改方法
Oct 21 PHP
php图像处理函数imagecopyresampled用法详解
Dec 02 PHP
详谈PHP中public,private,protected,abstract等关键字的用法
Dec 31 PHP
PHP闭包定义与使用简单示例
Apr 13 PHP
PHP5中使用mysqli的prepare操作数据库的介绍
Mar 18 PHP
laravel使用数据库测试注意事项
Apr 10 PHP
ThinkPHP发送邮件示例代码
Oct 08 #PHP
Yii2针对游客、用户防范规则和限制的解决方法分析
Oct 08 #PHP
Netbeans 8.2与PHP相关的新特性介绍
Oct 08 #PHP
Laravel中基于Artisan View扩展包创建及删除应用视图文件的方法
Oct 08 #PHP
PHP反射API示例分享
Oct 08 #PHP
验证坐标在某坐标区域内php代码
Oct 08 #PHP
php获取远程图片并下载保存到本地的方法分析
Oct 08 #PHP
You might like
PHP漏洞全解(详细介绍)
2012/11/13 PHP
PHP扩展模块memcached长连接使用方法分析
2014/12/24 PHP
php基于双向循环队列实现历史记录的前进后退等功能
2015/08/08 PHP
Zend Framework教程之模型Model基本规则和使用方法
2016/03/04 PHP
Redis使用Eval多个键值自增的操作实例
2016/11/04 PHP
Yii框架函数简单用法分析
2019/09/09 PHP
基于jQuery实现仿搜狐辩论投票动画代码(附源码下载)
2016/02/18 Javascript
基于Bootstrap重置输入框内容按钮插件
2016/05/12 Javascript
基于JavaScript实现的希尔排序算法分析
2017/04/14 Javascript
jQuery 实现双击编辑表格功能
2017/06/19 jQuery
利用JS制作万年历的方法
2017/08/16 Javascript
Vue.js进行查询操作的实例详解
2017/08/25 Javascript
js canvas实现二维码和图片合成的海报
2020/11/19 Javascript
Nuxt.js 数据双向绑定的实现
2019/02/17 Javascript
使用jquery的cookie实现登录页记住用户名和密码的方法
2019/03/13 jQuery
vue 自定义右键样式的实例代码
2019/11/06 Javascript
JS 遍历 json 和 JQuery 遍历json操作完整示例
2019/11/11 jQuery
JS插入排序简单理解与实现方法分析
2019/11/25 Javascript
wxpython 学习笔记 第一天
2009/03/16 Python
python实现的简单文本类游戏实例
2015/04/28 Python
python写一个md5解密器示例
2018/02/23 Python
python 实现对数据集的归一化的方法(0-1之间)
2018/07/17 Python
pyhanlp安装介绍和简单应用
2019/02/22 Python
python之pyqt5通过按钮改变Label的背景颜色方法
2019/06/13 Python
python如何制作英文字典
2019/06/25 Python
django使用JWT保存用户登录信息
2020/04/22 Python
python3通过qq邮箱发送邮件以及附件
2020/05/20 Python
Pytest单元测试框架如何实现参数化
2020/09/05 Python
python 基于UDP协议套接字通信的实现
2021/01/22 Python
文秘专业应届生求职信范文
2013/11/14 职场文书
积极贯彻学习两会精神总结
2014/03/17 职场文书
三好学生评语大全
2014/12/29 职场文书
违反学校规则制度检讨书
2015/01/01 职场文书
校园安全学习心得体会
2016/01/18 职场文书
JMeter对MySQL数据库进行压力测试的实现步骤
2022/01/22 MySQL
如何解决flex文本溢出问题小结
2022/07/15 HTML / CSS