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 日期时间处理函数小结
Dec 18 PHP
php 将字符串按大写字母分隔成字符串数组
Apr 30 PHP
PHP判断搜索引擎蜘蛛并自动记忆到文件的代码
Feb 04 PHP
php模拟js函数unescape的函数代码
Oct 20 PHP
php+html5使用FormData对象提交表单及上传图片的方法
Feb 11 PHP
php魔术函数__call()用法实例分析
Feb 13 PHP
php通过array_unshift函数添加多个变量到数组前端的方法
Mar 18 PHP
PHP微信支付实例解析
Jul 22 PHP
php中各种定义变量的方法小结
Oct 18 PHP
php学习笔记之字符串常见操作总结
Jul 16 PHP
php写app用的框架整理
Sep 29 PHP
php ActiveMQ的安装与使用方法图文教程
Feb 23 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加密扩展库Mcrypt安装和实例
2013/11/10 PHP
php简单实现批量上传图片的方法
2016/05/09 PHP
php利用fsockopen GET/POST提交表单及上传文件
2017/05/22 PHP
javascript下有关dom以及xml节点访问兼容问题
2007/11/26 Javascript
超棒的javascript页面顶部卷动广告效果
2007/12/01 Javascript
JS模拟的QQ面板上的多级可展开的菜单
2009/10/10 Javascript
通过javascript获取iframe里的值示例代码
2013/06/24 Javascript
JS下拉缓冲菜单示例代码
2013/08/30 Javascript
动态加载js、css等文件跨iframe实现
2014/02/24 Javascript
8个超实用的jQuery功能代码分享
2015/01/08 Javascript
jquery通过ajax加载一段文本内容的方法
2015/01/15 Javascript
kindeditor修复会替换script内容的问题
2015/04/03 Javascript
基于JavaScript实现移除(删除)数组中指定元素
2016/01/04 Javascript
基于BootStrap Metronic开发框架经验小结【一】框架总览及菜单模块的处理
2016/05/12 Javascript
使用jQuery.Qrcode插件在客户端动态生成二维码并添加自定义Logo
2016/09/01 Javascript
JS实现两周内自动登录功能
2017/03/23 Javascript
浏览器调试动态js脚本的方法(图解)
2018/01/19 Javascript
vue 注册组件的使用详解
2018/05/05 Javascript
JS实现仿微信支付弹窗功能
2018/06/25 Javascript
Vue axios全局拦截 get请求、post请求、配置请求的实例代码
2018/11/28 Javascript
微信小程序实现通过js操作wxml的wxss属性示例
2018/12/06 Javascript
vue elementui 实现搜索栏公共组件封装的实例代码
2020/01/20 Javascript
Python的Django框架中if标签的相关使用
2015/07/15 Python
Python断言assert的用法代码解析
2018/02/03 Python
利用Python实现Shp格式向GeoJSON的转换方法
2019/07/09 Python
Python 正则表达式 re.match/re.search/re.sub的使用解析
2019/07/22 Python
python matlab库简单用法讲解
2020/12/31 Python
纯CSS3实现给头像加个光芒四射且旋转的背景动画效果
2014/05/07 HTML / CSS
英国工艺品购物网站:Minerva Crafts
2018/01/29 全球购物
大学生咖啡店创业计划书
2014/01/21 职场文书
大学生学习2014年全国两会心得体会
2014/03/12 职场文书
法人代表身份证明书及授权委托书
2014/09/16 职场文书
2014法制宣传日活动总结范文
2014/11/01 职场文书
经理助理岗位职责
2015/02/02 职场文书
防卫过当辩护词
2015/05/21 职场文书
Python机器学习应用之基于线性判别模型的分类篇详解
2022/01/18 Python