phpcmsv9mysql扩展_让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 里面加入如下函数:

PHP

/**

* 快速导入第三方框架类库 所有第三方框架的类库文件放到系统的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;

}

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

50

51

52

53

54

55

56

57

58

59

60

61

/**

* 快速导入第三方框架类库 所有第三方框架的类库文件放到系统的libs/Vendor目录或者当前模块的clases目录下面

* @param string $classname 类库

* @param string $base 基础目录

* @param string $m 模块 当模块为1时调用系统的三方类库

* @param string $ext 类库后缀

* @return boolean

*/

publicstaticfunctionvendor($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;

}

returnself::import($classname,$base,$m,$ext);

}

/**

* 导入所需的类库 同java的Import 本函数有缓存功能

* @param string $classname 类库命名空间字符串

* @param string $base 起始路径

* @param string $ext 导入的文件扩展名

* @return boolean

*/

privatestaticfunctionimport($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{

returntrue;

}

}

$classname=str_replace(array('.','#'),array('/','.'),$classname);

if(isset($_file[$classname.$m]))

returntrue;

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");

}

returnnull;

}

用法:

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

结构图:

eb127d71f9597f64890089aad3117e01.png

引用方法:

PHP

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

1

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

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

结构示图:

ff40c450bb8273d4c13fa206a479e6d3.png

引用方法:

比如:

PHP

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

1

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

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值