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+javascript模拟Matrix画面
Oct 09 PHP
简单采集了yahoo的一些数据
Feb 14 PHP
使用PHP socke 向指定页面提交数据
Jul 23 PHP
PHP开发需要注意的安全问题
Sep 01 PHP
php修改时间格式的代码
May 29 PHP
PHP生成随机用户名和密码的实现代码
Feb 27 PHP
基于php无限分类的深入理解
Jun 02 PHP
PHP中的gzcompress、gzdeflate、gzencode函数详解
Jul 29 PHP
php面向对象的用户登录身份验证
Jun 08 PHP
在Laravel 的 Blade 模版中实现定义变量
Oct 14 PHP
浅析PHP中的 inet_pton 网络函数
Dec 16 PHP
PhpStorm的使用教程(本地运行PHP+远程开发+快捷键)
Mar 26 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
一个可以找出源代码中所有中文的工具
2006/10/25 PHP
Thinkphp3.2.3整合phpqrcode生成带logo的二维码
2016/07/21 PHP
php快速导入大量数据的实例方法
2019/09/23 PHP
javascript实现的动态文字变换
2007/07/28 Javascript
jQuery动态添加 input type=file的实现代码
2012/06/14 Javascript
jQuery页面图片伴随滚动条逐渐显示的小例子
2013/03/21 Javascript
基于javascript实现右下角浮动广告效果
2016/01/08 Javascript
PHP+jquery+ajax实现分页
2016/12/09 Javascript
图片上传之FileAPI与NodeJs
2017/01/24 NodeJs
bootstrap+jQuery 实现下拉菜单中复选框全选和全不选效果
2017/06/12 jQuery
在Vue中使用echarts的实例代码(3种图)
2017/07/10 Javascript
Web技术实现移动监测的介绍
2017/09/18 Javascript
在React 组件中使用Echarts的示例代码
2017/11/08 Javascript
javascript用rem来做响应式开发
2018/01/13 Javascript
小程序自定义日历效果
2018/12/29 Javascript
js实现上传图片并显示图片名称
2019/12/18 Javascript
通过实例了解JS执行上下文运行原理
2020/06/17 Javascript
[02:07]DOTA2新英雄展现中国元素,完美“圣典”亮相央视
2016/12/19 DOTA
[53:10]Secret vs Pain 2018国际邀请赛小组赛BO2 第一场 8.17
2018/08/20 DOTA
精确查找PHP WEBSHELL木马的方法(1)
2011/04/12 Python
python+selenium开发环境搭建图文教程
2017/08/11 Python
Python3导入自定义模块的三种方法详解
2018/04/13 Python
Python中修改字符串的四种方法
2018/11/02 Python
Python实现二维曲线拟合的方法
2018/12/29 Python
python剪切视频与合并视频的实现
2020/03/03 Python
Pycharm自带Git实现版本管理的方法步骤
2020/09/18 Python
Django 实现图片上传和下载功能
2020/12/31 Python
CSS3 3D酷炫立方体变换动画的实现
2019/03/26 HTML / CSS
Hotels.com中国区:好订网
2016/08/18 全球购物
业务部主管岗位职责
2014/01/29 职场文书
军训自我鉴定范文
2014/02/13 职场文书
2015年度培训工作总结范文
2015/04/02 职场文书
2015年银行员工工作总结
2015/04/24 职场文书
2016年暑期见闻作文
2015/11/25 职场文书
javascript函数式编程基础
2021/09/15 Javascript
Win11怎么解除儿童账号限制?Win11解除微软儿童账号限制方法
2022/07/07 数码科技