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 4.2书写安全的脚本
Oct 09 PHP
建立动态的WML站点(二)
Oct 09 PHP
PHP 之Section与Cookie使用总结
Sep 14 PHP
深入for,while,foreach遍历时间比较的详解
Jun 08 PHP
深入PHP autoload机制的详解
Jun 09 PHP
php获取文件内容最后一行示例
Jan 09 PHP
ThinkPHP3.1的Widget新用法
Jun 19 PHP
php 文件下载 出现下载文件内容乱码损坏的解决方法(推荐)
Nov 16 PHP
PHP框架laravel的.env文件配置教程
Jun 07 PHP
php实现映射操作实例详解
Oct 02 PHP
Laravel 修改默认日志文件名称和位置的例子
Oct 17 PHP
有关PHP 中 config.m4 的探索
Aug 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
PHP substr()函数参数解释及用法讲解
2017/11/23 PHP
一个JS小玩意 几个属性相加不能超过一个特定值.
2009/09/29 Javascript
使用Microsoft Ajax Minifier减小JavaScript文件大小的方法
2010/04/01 Javascript
浅说js变量
2011/05/25 Javascript
jQuery方法简洁实现隔行换色及toggleClass的使用
2013/03/15 Javascript
JS字符串拼接在ie中都报错的解决方法
2014/03/27 Javascript
javascript函数式编程实例分析
2015/04/25 Javascript
原生js实现节日时间倒计时功能
2017/01/18 Javascript
浅谈JS验证表单文本域输入空格的问题
2017/02/14 Javascript
JavaScript简单实现合并两个Json对象的方法示例
2017/10/16 Javascript
nodejs 日志模块winston的使用方法
2018/05/02 NodeJs
angularjs实现的购物金额计算工具示例
2018/05/08 Javascript
JS Object.preventExtensions(),Object.seal()与Object.freeze()用法实例分析
2018/08/25 Javascript
详解vue页面首次加载缓慢原因及解决方案
2019/11/06 Javascript
JavaScript单线程和任务队列原理解析
2020/02/04 Javascript
Python设计模式之抽象工厂模式
2016/08/25 Python
Python 出现错误TypeError: ‘NoneType’ object is not iterable解决办法
2017/01/12 Python
Python 字符串转换为整形和浮点类型的方法
2018/07/17 Python
python socket通信编程实现文件上传代码实例
2019/12/14 Python
浅谈tensorflow中Dataset图片的批量读取及维度的操作详解
2020/01/20 Python
pandas中的数据去重处理的实现方法
2020/02/10 Python
django rest framework serializer返回时间自动格式化方法
2020/03/31 Python
jupyter 使用Pillow包显示图像时inline显示方式
2020/04/24 Python
浅谈Python爬虫原理与数据抓取
2020/07/21 Python
浅谈Html5页面打开app的一些思考
2020/03/30 HTML / CSS
MADE荷兰:提供原创设计师家具
2018/04/03 全球购物
英国在线自行车店:Merlin Cycles
2018/08/20 全球购物
澳大利亚最早和最古老的巨型游戏专家:Yardgames
2020/02/20 全球购物
数控专业推荐信范文
2013/12/02 职场文书
世界读书日的活动方案
2014/08/20 职场文书
学雷锋倡议书
2015/01/19 职场文书
寻找成龙观后感
2015/06/12 职场文书
毕业班工作总结
2015/08/10 职场文书
六年级作文之预言作文
2019/10/25 职场文书
教你怎么用Python操作MySql数据库
2021/05/31 Python
Python编程中内置的NotImplemented类型的用法
2022/03/23 Python