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脚本的10个技巧(8)
Oct 09 PHP
php如何调用webservice应用介绍
Nov 24 PHP
php5.5新数组函数array_column使用
Jul 08 PHP
php 批量替换html标签的实例代码
Nov 26 PHP
php获取淘宝分类id示例
Jan 16 PHP
php生成html文件方法总结
Dec 01 PHP
php轻松实现文件上传功能
Mar 03 PHP
ThinkPHP模板循环输出Volist标签用法实例详解
Mar 23 PHP
windows下的WAMP环境搭建图文教程(推荐)
Jul 27 PHP
php判断电子邮件是否正确方法
Dec 04 PHP
PHP微信支付结果通知与回调策略分析
Jan 10 PHP
PHP children()函数讲解
Feb 03 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
真正面向对象编程:PHP5.01发布
2006/10/09 PHP
Symfony2框架学习笔记之HTTP Cache用法详解
2016/03/18 PHP
Centos 6.5下PHP 5.3安装ffmpeg扩展的步骤详解
2017/03/02 PHP
通过MSXML2自动获取QQ个人头像及在线情况(给初学者)
2007/01/22 Javascript
详解JSON1:使用TSQL查询数据和更新JSON数据
2016/11/21 Javascript
前端js弹出框组件使用方法
2020/08/24 Javascript
js以及jquery实现手风琴效果
2020/04/17 Javascript
基于zepto.js实现手机相册功能
2017/07/11 Javascript
vue 打包后的文件部署到express服务器上的方法
2017/08/09 Javascript
在 Node.js 中使用 async 函数的方法
2017/11/17 Javascript
vue-auto-focus: 控制自动聚焦行为的 vue 指令方法
2018/08/25 Javascript
javascript中一些奇葩的日期换算方法总结
2018/11/14 Javascript
详解小程序设置缓存并且不覆盖原有数据
2019/04/15 Javascript
angular6开发steps步骤条组件
2019/07/04 Javascript
详解使用WebPack搭建React开发环境
2019/08/06 Javascript
深入理解redux之compose的具体应用
2020/01/12 Javascript
python 多进程通信模块的简单实现
2014/02/20 Python
Python中shape计算矩阵的方法示例
2017/04/21 Python
python使用两种发邮件的方式smtp和outlook示例
2017/06/02 Python
python爬虫URL重试机制的实现方法(python2.7以及python3.5)
2018/12/18 Python
对Python多线程读写文件加锁的实例详解
2019/01/14 Python
python爬取微信公众号文章的方法
2019/02/26 Python
django框架防止XSS注入的方法分析
2019/06/21 Python
Python timeit模块的使用实践
2020/01/13 Python
Anconda环境下Vscode安装Python的方法详解
2020/03/29 Python
html5的画布canvas——画出简单的矩形、三角形实例代码
2013/06/09 HTML / CSS
HTML5通过调用canvas对象的getContext()方法来获取绘图环境
2014/06/23 HTML / CSS
美国玛丽莎收藏奢华时尚商店:Marissa Collections
2016/11/21 全球购物
澳大利亚领先的皮肤诊所:Skin Matrix(抗衰老、痤疮专家、药妆护肤)
2018/05/20 全球购物
会计电算化大学生职业规划书
2014/02/05 职场文书
大学毕业感言50字
2014/02/07 职场文书
关于感恩的演讲稿400字
2014/08/26 职场文书
干部培训简讯
2015/07/20 职场文书
《七律·长征》教学反思
2016/02/16 职场文书
vue项目支付功能代码详解
2022/02/18 Vue.js
Python selenium绕过webdriver监测执行javascript
2022/04/12 Python