正在加载周涛博客
自留地
切勿乱来!
        找回密码

让PHPCMS V9 支持Composer第三方扩展类库

前言

什么是Composer

为了避免一些不必要的麻烦,唠叨几句composer,其实我自己也迷糊ing,这方面知识面向百度!

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

结构图:

引用方法:

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

 

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

结构示图:

引用方法:

比如:

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

 

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

赞(0) 打赏
版权声明:本文采用知识共享 署名4.0国际许可协议 [BY-NC-SA] 进行授权
文章名称:《让PHPCMS V9 支持Composer第三方扩展类库》
文章链接:https://www.ediok.cn/blog/2020/04/4636.html
本站资源仅供个人学习交流,请于下载后24小时内删除,不允许用于商业用途,否则法律问题自行承担。

评论 抢沙发

评论前必须登录!

 

关注互联网发展前沿,关注PHPCMS技术演进,钻研PHPCMS技术开发

模块开发联系我们

觉得文章有用就打赏一下文章作者

非常感谢你的打赏,我们将继续给力更多优质内容,让我们一起创建更加美好的网络世界!

支付宝扫一扫打赏

微信扫一扫打赏