手记

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

一直在跟着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人推荐
随时随地看视频
慕课网APP

热门评论

你好,我想问一下,现在我找了一个文件管理器的插件(elfinder,集成到thinkPHP中),配置文件中有一句代码'driver'        => 'LocalFileSystem',这个就是所谓的驱动吧,和配置文件同级的目录下有一个elFinderVolumeLocalFileSystem.class.php文件,但是这句代码好像是不起作用的,我不知道应该把这个类文件放到哪里去(THinkPHP/Library/think下页试过了,不管用),想问问你知道把这个文件放在哪里吗?如果知道请回复一下我,十分感谢

最近打算入手这门课程,还请前辈多指教

查看全部评论