2

前言

ThinkPhp5问世已近一年,然而仍然有很多的坑,然后不由得想起Laravel的好了。当然TP5仍然需要时间去做得更好。今天要说的确是ThinkPhp3。thinkphp3是个成熟的框架。java有maven,php有packagist,然而packagist里的库于thinkphp3确是水土不服,我想这就是thinkphp5的诞生契机之一吧。我是个懒人,有现成的库可以使用,我觉得没必要再去写,不然公共库的意义就不大了至于为什么会水土不服,大概就是autoload的方式不一样,关于这点且不深究。

干货

  1. 进入composer库,查找关键字phpspreadsheet,找到该库在github上的地址,然后down下来
    图片描述

  2. 解压到本地,找到目录下面的src下面的phpspreadsheet文件夹
    图片描述

  3. 先看一眼这个文件夹下随便一个php文件的namespace
    图片描述

  4. 再在Thinkphp的框架目录下面Library/Vendorc创建PhpOffice文件夹,然后将down下来的库里xxx/src/目录下的PhpSpreadsheet文件夹整个copy到PhpOffice文件夹下

  5. 最后只需要修改copy过来文件的后缀就可以了。下面是脚本

public function change_suffix(){
    $basepath = realpath(THINK_PATH)."\\";
    $path = 'Library\\Vendor\\PhpOffice';
    $all = array();
    $this->getFileInDir($basepath.$path,$all);
    foreach ($all as $one){
        if(strpos($one, 'class') === false){
            $new_name = str_replace('.php', '.class.php', $one);
            rename($one, $new_name);
        }
    }
}
private function getFileInDir($dir,&$all){
    if(is_dir($dir)){
        $ss = scandir($dir);
        unset($ss[1]);
        unset($ss[0]);
        foreach ($ss as $s){
            $sdir = $dir.'\\'.$s;
            if(is_dir($sdir) && $s != 'Default'){
                $this->getFileInDir($sdir,$all);
            }else{
                $all[] = $sdir;
            }
        }
    }
}

最后在config.php文件里面加上

'AUTOLOAD_NAMESPACE'          => array(
    'PhpOffice'               => THINK_PATH.'Library/Vendor/PhpOffice',
),

你就可以用$spreadsheet = new \PhpOffice\PhpSpreadsheet\Spreadsheet();这种方式来new库里的实例

以上方法并不是对所有的packagist里面的库都适用,各位需随机应变呐


birdshark
377 声望3 粉丝

懒不留