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 相关文章推荐
PHP初学者头疼问题总结
Oct 09 PHP
php checkbox复选框值的获取与checkbox默认值输出方法
May 15 PHP
探讨PHP中this,self,parent的区别详解
Jun 08 PHP
Linux Apache PHP Oracle 安装配置(具体操作步骤)
Jun 17 PHP
PHP常用的缓存技术汇总
May 05 PHP
PHP网页游戏学习之Xnova(ogame)源码解读(二)
Jun 23 PHP
destoon出现验证码不显示时的紧急处理方法
Aug 22 PHP
PHP闭包实例解析
Sep 08 PHP
PHP链接MySQL的常用扩展函数
Oct 23 PHP
PHP将Excel导入数据库及数据库数据导出至Excel的方法
Jun 24 PHP
PHP支付系统设计与典型案例分享
Aug 02 PHP
php实现mysql连接池效果实现代码
Jan 25 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实现基于面向对象的mysqli扩展库增删改查操作工具类
2017/07/18 PHP
简单的js分页脚本
2009/05/21 Javascript
jquery $.ajax相关用法分享
2012/03/16 Javascript
JS中不为人知的五种声明Number的方式简要概述
2013/02/22 Javascript
浅谈jQuery中replace()方法
2015/05/13 Javascript
使用JavaScript脚本判断页面是否在微信中被打开
2016/03/06 Javascript
详解jQuery uploadify文件上传插件的使用方法
2016/12/16 Javascript
video.js使用改变ui过程
2017/03/05 Javascript
javascript 中关于array的常用方法详解
2017/05/05 Javascript
jQuery实现html双向绑定功能示例
2017/10/09 jQuery
vue项目中添加单元测试的方法
2018/07/21 Javascript
jQuery中常用动画效果函数知识点整理
2018/08/19 jQuery
vue-cli3配置与跨域处理方法
2019/08/17 Javascript
layer扩展打开/关闭动画的方法
2019/09/23 Javascript
layui 监听select选择 获取当前select的ID名称方法
2019/09/24 Javascript
js判断浏览器的环境(pc端,移动端,还是微信浏览器)
2020/12/24 Javascript
JavaScript检测浏览器是否支持CSS变量代码实例
2020/04/03 Javascript
浅谈JavaScript中的“!!”作用
2020/08/03 Javascript
ant design pro中可控的筛选和排序实例
2020/11/17 Javascript
Python3.4实现远程控制电脑开关机
2018/02/22 Python
Python基于FTP模块实现ftp文件上传操作示例
2018/04/23 Python
pandas.loc 选取指定列进行操作的实例
2018/05/18 Python
PyQt5 窗口切换与自定义对话框的实例
2019/06/20 Python
python 字符串追加实例
2019/07/20 Python
Pyspark获取并处理RDD数据代码实例
2020/03/27 Python
如何基于pandas读取csv后合并两个股票
2020/09/25 Python
python 第三方库paramiko的常用方式
2021/02/20 Python
Marmot土拨鼠官网:美国专业户外运动品牌
2018/01/11 全球购物
Set里的元素是不能重复的,那么用什么方法来区分重复与否呢?
2016/08/18 面试题
大学生村官任职感言
2014/01/09 职场文书
中学家长会邀请函
2014/02/03 职场文书
机械制造毕业生求职信
2014/03/03 职场文书
会议接待欢迎词范文
2015/01/26 职场文书
2016年小学植树节活动总结
2016/03/16 职场文书
教师学期述职自我鉴定
2019/08/16 职场文书
使用nginx动态转换图片大小生成缩略图
2021/03/31 Servers