为了账号安全,请及时绑定邮箱和手机立即绑定

扒出并移植ThinkPHP自带“上传类“秒懂“驱动”

标签:
PHP 测试

一直在跟着singwa老师的课程在学习,按照老师的课程使用ThinkPHP开发了一个CMS系统。
开发完整个网站系统以后,对整个网站开发的业务逻辑算是走通了,但是还有一些问题就是,使用框架的话有一些核心的类是框架自身已经集成好了,用起来确实很方便,不过就学习而言我们还是要读一读框架的核心类文件的。这也是singwa老师一直跟我说的:“学习框架要弄懂弄通一个这个框架的内核,这样对学习才有帮助”。所以才有了下面的,扒出来thinkPhP的自带上传类。不废话了直接进入场景:

我这边是自己写了一个小框架,然后试着把整个CMS站移植过来,尽量还原成原生的状态。不过整个过程也不是那么的顺利,今天就碰到了这个功能费了很大劲才做出来。

这个功能是 利用 uploadify插件 完成图片的异步上传。

图片描述
当我把这个功能的控制器和模型都搭建好以后我发现我缺一个成熟的文件上传类!这个时候就去网上找了很多 发现都是不合适的苦逼!!~~然后想着不如把TP的上传类给扒下来吧!。好主意!~ 然后就是复制粘贴了!。如下图:
当然,事情不会这么顺利,整个类移植过来以后肯定是彻底不能用的!在看TP的上传类的时候 “驱动”两个字一直让处于懵逼状态。经过这次移植我才明白了原来这个“驱动”其实就是加载一个外部的类。看代码:
图片描述

【下图里圈出来的方法再TP的上传类里是没有的 其实就是下文所提到的“驱动”类 里的方法 】
图片描述

而uploader 是 “驱动”类的对象
图片描述

看到这几张图就应该明白了吧,其实TP 上传类 里的驱动 就是加载一个外部的类,而这个类里的方法可以说成是TP上传主类的 某一种上传的形式。而TP默认的上传方式 就是Local.class.php 这个类了!
图片描述

那么为什么TP默认的上传驱动类是load.class.php呢?我们回头看一下TP上传主类中的 设置上传驱动 方法!

  /**
     * 设置上传驱动
     * @param string $driver 驱动名称
     * @param array $config 驱动配置     
     */
    private function setDriver($driver = null, $config = null){
//看这里!也就是说 如果$driver为空  默认就是   C('FILE_UPLOAD_TYPE')
        $driver = $driver ? : ($this->driver       ? : C('FILE_UPLOAD_TYPE'));
        $config = $config ? : ($this->driverConfig ? : C('UPLOAD_TYPE_CONFIG'));
        $class = strpos($driver,'\\')? $driver : 'Think\\Upload\\Driver\\'.ucfirst(strtolower($driver));
        $this->uploader = new $class($config);
        if(!$this->uploader){
            E("不存在上传驱动:{$name}");
        }
    }

再返回来看一下配置文件里的配置项:
图片描述

是不是瞬间明白了!!好啦 这次分享就到这里,文笔差废话多 大神莫喷!另外感谢singwa老师的thinkPHP实战开发课程。碉堡~

by:橙橙同学 QQ 543577508

点击查看更多内容
17人点赞

若觉得本文不错,就分享一下吧!

评论

作者其他优质文章

正在加载中
感谢您的支持,我会继续努力的~
扫码打赏,你说多少就多少
赞赏金额会直接到老师账户
支付方式
打开微信扫一扫,即可进行扫码打赏哦
今天注册有机会得

100积分直接送

付费专栏免费学

大额优惠券免费领

立即参与 放弃机会
意见反馈 帮助中心 APP下载
官方微信

举报

0/150
提交
取消