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 相关文章推荐
图书管理程序(三)
Oct 09 PHP
PHP新手上路(四)
Oct 09 PHP
PHP4 与 MySQL 数据库操作函数详解
Dec 06 PHP
PHP中cookies使用指南
Mar 16 PHP
php中判断一个字符串包含另一个字符串的方法
Mar 19 PHP
php文件服务实现虚拟挂载其他目录示例
Apr 17 PHP
分享一则PHP定义函数代码
Feb 26 PHP
大家在抢红包,程序员在研究红包算法
Aug 31 PHP
在WordPress中使用wp-cron插件来设置定时任务
Dec 10 PHP
Zend Framework框架之Zend_Mail实现发送Email邮件验证功能及解决标题乱码的方法
Mar 21 PHP
一次因composer错误使用引发的问题与解决
Mar 06 PHP
laravel 解决ajax异步提交数据,并还回填充表格的问题
Oct 15 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
javascript 小型动画组件与实现代码
2010/06/02 PHP
PHP获取url的函数代码
2011/08/02 PHP
php实现表单提交上传文件功能
2018/05/28 PHP
thinkPHP5框架自定义验证器实现方法分析
2018/06/11 PHP
PHP文件上传小程序 适合初学者学习!
2019/05/23 PHP
php设计模式之状态模式实例分析【星际争霸游戏案例】
2020/03/26 PHP
javascript 解决表单仍然提交即使监听处理函数返回false
2010/03/14 Javascript
javascript中apply和call方法的作用及区别说明
2014/02/14 Javascript
举例详解Python中smtplib模块处理电子邮件的使用
2015/06/24 Javascript
javascript创建对象的几种模式介绍
2016/05/06 Javascript
jsp 自动编译机制详细介绍
2016/12/01 Javascript
微信小程序 Template详解及简单实例
2017/01/05 Javascript
AngularJS读取JSON及XML文件的方法示例
2017/05/25 Javascript
利用Ionic2 + angular4实现一个地区选择组件
2017/07/27 Javascript
JavaScript 保护变量不被随意修改的实现代码
2017/09/27 Javascript
JS随机排序数组实现方法分析
2017/10/11 Javascript
基于jquery trigger函数无法触发a标签的两种解决方法
2018/01/06 jQuery
vue bus全局事件中心简单Demo详解
2018/02/26 Javascript
在vue中使用v-bind:class的选项卡方法
2018/09/27 Javascript
vue.js封装switch开关组件的操作
2020/10/26 Javascript
python实现用于测试网站访问速率的方法
2015/05/26 Python
Python利用带权重随机数解决抽奖和游戏爆装备问题
2016/06/16 Python
Python3多线程爬虫实例讲解代码
2018/01/05 Python
Windows系统下PhantomJS的安装和基本用法
2018/10/21 Python
Python实现计算文件MD5和SHA1的方法示例
2019/06/11 Python
python 合并多个excel中同名的sheet
2021/01/22 Python
基于Jquery和Css3代码制作可以缩放的搜索框
2015/11/19 HTML / CSS
CSS3标注引用的出处和来源的方法
2020/02/25 HTML / CSS
沙特阿拉伯排名第一的在线时尚购物应用程序:1Zillion
2020/08/08 全球购物
英语硕士生求职简历的自我评价
2013/10/15 职场文书
毕业生就业推荐表自我鉴定
2014/03/20 职场文书
中层干部竞聘演讲稿
2014/05/15 职场文书
2014社会治安综合治理工作总结
2014/12/04 职场文书
2014年医院个人工作总结
2014/12/09 职场文书
世界水日宣传活动总结
2015/02/09 职场文书
运动会新闻稿
2015/07/17 职场文书