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 curl_init函数用法
Jan 31 PHP
查找php配置文件php.ini所在路径的二种方法
May 26 PHP
php中字符串和正则表达式详解
Oct 23 PHP
php中get_meta_tags()、CURL与user-agent用法分析
Dec 16 PHP
php抓取并保存网站图片的实现代码
Oct 28 PHP
php结合mysql与mysqli扩展处理事务的方法
Jun 29 PHP
PHP页面输出时js设置input框的选中值
Sep 30 PHP
PHP基于curl后台远程登录正方教务系统的方法
Oct 14 PHP
php微信开发之关注事件
Jun 14 PHP
php 多进程编程父进程的阻塞与非阻塞实例分析
Feb 22 PHP
如何理解PHP核心特性命名空间
May 28 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动态柱状图实现方法
2015/03/30 PHP
php生成随机数/生成随机字符串的方法小结【5种方法】
2020/05/27 PHP
常用js脚本
2006/12/03 Javascript
加载远程图片时,经常因为缓存而得不到更新的解决方法(分享)
2013/06/26 Javascript
JavaScript事件委托的技术原理探讨示例
2014/04/17 Javascript
重写document.write实现无阻塞加载js广告(补充)
2014/12/12 Javascript
jQuery实现瀑布流布局详解(PC和移动端)
2020/09/01 Javascript
jQuery解析Json实例详解
2015/11/24 Javascript
Javascript中的几种继承方式对比分析
2016/03/22 Javascript
javascript实现列表切换效果
2016/05/02 Javascript
jquery中取消和绑定hover事件的实现代码
2016/06/02 Javascript
Jquery和BigFileUpload实现大文件上传及进度条显示
2016/06/27 Javascript
JavaScript数据结构之二叉树的删除算法示例
2017/04/13 Javascript
React中上传图片到七牛的示例代码
2017/10/10 Javascript
webpack4 + react 搭建多页面应用示例
2018/08/03 Javascript
用VueJS写一个Chrome浏览器插件的实现方法
2019/02/27 Javascript
使用TS来编写express服务器的方法步骤
2020/10/29 Javascript
[01:01:25]DOTA2上海特级锦标赛B组资格赛#2 Fnatic VS Spirit第三局
2016/02/27 DOTA
Python中实现结构相似的函数调用方法
2015/03/10 Python
通过实例浅析Python对比C语言的编程思想差异
2015/08/30 Python
python字符串Intern机制详解
2019/07/01 Python
pytorch1.0中torch.nn.Conv2d用法详解
2020/01/10 Python
Crabtree & Evelyn英国官网:瑰珀翠护手霜、香水、沐浴和身体护理
2018/04/26 全球购物
数百万免费的图形资源:Freepik
2020/09/21 全球购物
奥巴马开学演讲稿
2014/05/15 职场文书
会计求职信
2014/05/29 职场文书
酒店七夕情人节活动策划方案
2014/08/24 职场文书
公司周年庆活动方案
2014/08/25 职场文书
教师四风问题对照检查材料
2014/09/26 职场文书
农村党支部书记司法四风问题对照检查材料
2014/09/26 职场文书
十佳少年事迹材料
2014/12/25 职场文书
全国助残日活动总结
2015/05/11 职场文书
2015年度招聘工作总结
2015/05/28 职场文书
mysql查询的控制语句图文详解
2021/04/11 MySQL
sql时间段切分实现每隔x分钟出一份高速门架车流量
2022/02/28 SQL Server
Python 中面向接口编程
2022/05/20 Python