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创建多级目录代码
Jun 05 PHP
用PHP将数据导入到Foxmail的实现代码
Sep 05 PHP
浏览器关闭后,能继续执行的php函数(ignore_user_abort)
Aug 01 PHP
php后台如何避免用户直接进入方法实例
Oct 15 PHP
php数组去重实例及分析
Nov 26 PHP
使用PHP similar text计算两个字符串相似度
Nov 06 PHP
ThinkPHP中where()使用方法详解
Apr 19 PHP
PHP微信企业号开发之回调模式开启与用法示例
Nov 25 PHP
PHP的简单跳转提示的实现详解
Mar 14 PHP
laravel5.0在linux下解决.htaccess无效和去除index.php的问题
Oct 16 PHP
ThinkPHP5.0框架实现切换数据库的方法分析
Oct 30 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 数组的创建、调用和更新实现代码
2009/03/09 PHP
PHPCMS的使用小结
2010/09/20 PHP
php模板中出现空行解决方法
2011/03/08 PHP
PHP下通过exec获得计算机的唯一标识[CPU,网卡 MAC地址]
2011/06/09 PHP
初步介绍PHP扩展开发经验分享
2012/09/06 PHP
PHP下获取上个月、下个月、本月的日期(strtotime,date)
2014/02/02 PHP
让ThinkPHP支持大小写url地址访问的方法
2014/10/31 PHP
php使用pdo连接报错Connection failed SQLSTATE的解决方法
2014/12/15 PHP
WordPress的主题编写中获取头部模板和底部模板
2015/12/28 PHP
PHP数组函数知识汇总
2016/05/12 PHP
php过滤htmlspecialchars() 函数实现把预定义的字符转换为 HTML 实体用法分析
2019/06/25 PHP
javascript 控制弹出窗口
2007/04/10 Javascript
js 利用className得到对象的实现代码
2011/11/15 Javascript
jQuery之过滤元素操作小结
2013/11/30 Javascript
jQuery实现限制textarea文本框输入字符数量的方法
2015/05/28 Javascript
基于javascript实现简单计算器功能
2016/01/03 Javascript
详解JavaScript中localStorage使用要点
2016/01/13 Javascript
Javascript学习之谈谈JS的全局变量跟局部变量(推荐)
2016/08/28 Javascript
Webstorm2016使用技巧(SVN插件使用)
2018/10/29 Javascript
富文本编辑器vue2-editor实现全屏功能
2019/05/26 Javascript
python实现数通设备端口监控示例
2014/04/02 Python
Python用GET方法上传文件
2015/03/10 Python
Python入门之三角函数tan()函数实例详解
2017/11/08 Python
python方法生成txt标签文件的实例代码
2018/05/10 Python
caffe binaryproto 与 npy相互转换的实例讲解
2018/07/09 Python
解决sublime+python3无法输出中文的问题
2018/12/12 Python
解决Pycharm 导入其他文件夹源码的2种方法
2020/02/12 Python
全球最大的跑步用品商店:Road Runner Sports
2016/09/11 全球购物
Sephora丝芙兰印尼官方网站:购买化妆品和护肤品
2018/07/02 全球购物
Servlet都有哪些方法?主要作用是什么?
2014/03/04 面试题
怎样写演讲稿
2014/01/04 职场文书
汽车促销活动方案
2014/03/31 职场文书
2014年安全生产大检查方案
2014/05/13 职场文书
大学生入党积极分子自我评价
2014/09/20 职场文书
教研活动主持词
2015/07/03 职场文书
2016年教育局“我们的节日——端午节”主题活动总结
2016/04/01 职场文书