15621857753

phpcmsV9如何实现支持Composer第三方扩展类库

来源:齐鲁CMS 栏目:PHPCMS 阅读: 日期:2021-02-25

本文介绍了phpcmsV9如何实现支持Composer第三方扩展类库,教程讲了什么是Composer,怎么安装Composer,以及让PHPCMS支持Composer的方法,详细情况请看教程吧。

什么是Composer?

Composer 是 PHP5.3以上 的一个依赖管理工具。它允许你声明项目所依赖的代码库,它会在你的项目中为你安装他们。Composer 不是一个包管理器。是的,它涉及 “packages” 和 “libraries”,但它在每个项目的基础上进行管理,在你项目的某个目录中(例如 vendor)进行安装。默认情况下它不会在全局安装任何东西。因此,这仅仅是一个依赖管理。

怎么安装Composer?

同样是面向百度来着,但百度搜到的东西太多都是无法用或者失败,所以这里选择的教程是Composer中文网全量镜像,请移步这里看教程(突然懒了不想自己写了):https://pkg.phpcomposer.com/

PHPCMS V9支持Composer方法

第一步:打开/phpcms/base.php

在class pc_base 里面加入如下函数:

    /**
     * 快速导入第三方框架类库 所有第三方框架的类库文件放到系统的libs/Vendor目录或者当前模块的clases目录下面
     * @param string $classname 类库
     * @param string $base 基础目录
     * @param string $m 模块 当模块为1时调用系统的三方类库
     * @param string $ext 类库后缀
     * @return boolean
     */
    public static function vendor($classname, $base = '', $m = '', $ext = '.php')
    {
        #if(empty($base)) $base=$classname;
        if (empty($m) && defined('ROUTE_M')) {
            $m = ROUTE_M;
        } else {
            $m = ($m == 1) ? NULL : $m;
        }
        return self::import($classname, $base, $m, $ext);
    }
    /**
     * 导入所需的类库 同java的Import 本函数有缓存功能
     * @param string $classname 类库命名空间字符串
     * @param string $base 起始路径
     * @param string $ext 导入的文件扩展名
     * @return boolean
     */
    private static function import($classname, $base, $m = '', $ext = '.php')
    {
        static $_file = array();
        static $classes = array();
        $key = md5($classname);

        if (isset($classes[$key])) {
            if (!empty($classes[$key])) {
                return $classes[$key];
            } else {
                return true;
            }
        }
        $classname = str_replace(array('.', '#'), array('/', '.'), $classname);

        if (isset($_file[$classname . $m]))
            return true;
        else
            $_file[$classname . $m] = true;
        $class_strut = explode('/', $classname);
        #print_r($class_strut);
        if (empty($m)) { //模块为空则加载系统的
            $m = 'libs' .DIRECTORY_SEPARATOR. 'vendor' . DIRECTORY_SEPARATOR . $base;
        } else { // 加载其他模块的类库
            $m = 'modules' . DIRECTORY_SEPARATOR . $m . DIRECTORY_SEPARATOR . 'classes' . DIRECTORY_SEPARATOR . $base;
        }
        if (substr($m, -1) != '/') $m .= '/';
        $classfile = $m . $classname . $ext;
        if (!class_exists(basename($classname), false) && file_exists(PC_PATH . $classfile)) {
            require PC_PATH . $classfile;
        } else {
            echo ("The $classname library cannot be found in the directory of Vendor");

        }
        return null;
    }

用法:

系统类库存放在/phpcms/libs目录里,在这个文件夹里建立composer.json 后进行composer install,会在当前目录里建立项目文件夹vendor

结构图:

phpcmsV9支持Composer

引用方法:

pc_base::vendor( 'autoload','',1 );

模块类库放在/phpcms/modules/classes里,可以直接下载类库放在这里使用

结构示图:

phpcmsV9支持Composer

引用方法:

比如:

pc_base::vendor('autoload','oss','attachment');

引入/phpcms/modules/attachment/classes/oss/autoload.php

这样就可以了。

以上就是关于phpcmsV9支持Composer的所有内容,希望可以帮到大家,欢迎找小编一起交流~