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+dbfile开发小型留言本
Oct 09 PHP
php pack与unpack 摸板字符字符含义
Oct 29 PHP
并发下常见的加锁及锁的PHP具体实现代码
Oct 12 PHP
在PHP中利用wsdl创建标准webservice的实现代码
Dec 07 PHP
PHP网页游戏学习之Xnova(ogame)源码解读(二)
Jun 23 PHP
php+xml结合Ajax实现点赞功能完整实例
Jan 30 PHP
用PHP代码给图片加水印
Jul 01 PHP
PHP环境中Memcache的安装和使用
Nov 05 PHP
php实现smarty模板无限极分类的方法
Dec 07 PHP
Yii2实现增删改查后留在当前页的方法详解
Jan 13 PHP
PHP大文件分片上传的实现方法
Oct 28 PHP
ThinkPHP5.0框架使用build 自动生成模块操作示例
Apr 11 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使用GeoIP库实例
2014/06/27 PHP
PHP微信开发之微信消息自动回复下所遇到的坑
2016/05/09 PHP
PHP获取IP地址所在地信息的实例(使用纯真IP数据库qqwry.dat)
2016/11/15 PHP
php用xpath解析html的代码实例讲解
2019/02/14 PHP
javascript form 验证函数 弹出对话框形式
2009/06/23 Javascript
JS通过分析userAgent属性来判断浏览器的类型及版本
2014/03/28 Javascript
Javascript基础教程之函数对象和属性
2015/01/18 Javascript
JS中frameset框架弹出层实例代码
2016/04/01 Javascript
JS 事件绑定、事件监听、事件委托详细介绍
2016/09/28 Javascript
详谈angularjs中路由页面强制更新的问题
2017/04/24 Javascript
深入解析nodejs HTTP服务
2017/07/25 NodeJs
微信小程序methods中定义的方法互相调用的实例代码
2018/08/07 Javascript
Vue自定义弹窗指令的实现代码
2018/08/13 Javascript
微信小程序自定义键盘 内部虚拟支付
2018/12/20 Javascript
其实你可以少写点if else与switch(推荐)
2019/01/10 Javascript
jQuery中DOM常见操作实例小结
2019/08/01 jQuery
Vue+ElementUI table实现表格分页
2019/12/14 Javascript
node.js使用mongoose操作数据库实现购物车的增、删、改、查功能示例
2019/12/23 Javascript
24个解决实际问题的ES6代码片段(小结)
2020/02/02 Javascript
vue-router 路由传参用法实例分析
2020/03/06 Javascript
原生JS实现拖拽功能
2020/12/16 Javascript
python删除列表内容
2015/08/04 Python
Python上传package到Pypi(代码简单)
2016/02/06 Python
Python 查看文件的读写权限方法
2018/01/23 Python
Tensorflow之Saver的用法详解
2018/04/23 Python
简单了解python反射机制的一些知识
2019/07/13 Python
Python通过cv2读取多个USB摄像头
2019/08/28 Python
使用Fabric自动化部署Django项目的实现
2019/09/27 Python
Python 转移文件至云对象存储的方法
2021/02/07 Python
css3实现简单的白云飘动背景特效
2020/10/28 HTML / CSS
自立自强的名人事例
2014/02/10 职场文书
巴西世界杯32强口号
2014/06/05 职场文书
建筑工地文明标语
2014/10/09 职场文书
2015年民主评议党员工作总结
2015/05/19 职场文书
2015年党总支工作总结
2015/05/25 职场文书
PyTorch dropout设置训练和测试模式的实现
2021/05/27 Python