# 模块预留扩展

TIP

v10已经模块可扩展的功能包含:上传,邮件,短信,支付,url推送,富文本编辑器。 第三方开发者可根据系统自带的模块参考写新的扩展,完全不影响程序后期的升级,实现无缝结合。

# 重要位置1:

(主要存放处理类库) \application\common\extend\

# 重要位置2:

(主要存放后台显示配置) \application\admin\view\extend\

# 第三方类库

在苹果cms插件开发过程中经常需要引用于第三方的类库,此时可以采用以下两种方式进行引入。

# 手动修改文件命名空间

如果我们引入的第三方类库文件比较少,我们可以采取手动修改文件命名空间的功能。例如我们需要引入HashMap.php这个类库,这个类库功能比较单一,只有一个文件,此时我们可以将HashMap.php文件放在addons/mydemo/library目录下,然后再修改HashMap.php中的namespace,修改为

<?php

namespace addons\mydemo\library;

class HashMap
{
    //类库代码
}
1
2
3
4
5
6
7
8
  • 其中mydemo为你的插件目录名。
  • 通过以上修改后,我们在我们的服务端任何位置均可使用
$hashMap = new \addonos\mydemo\library\HaspMap();
$result = $hashMap->myNormalMethod();
1
2
  • 来实例化我们的类,静态方法可以通过
$result = \addonos\mydemo\library\HashMap::myStaticMethod();
1

其中myNormalMethodHaspMap的公共方法,myStaticMethodHashMap的静态方法。

# 通过行为载入命名空间

  • 如果我们引入的第三方类库是一个composer包,或者说这个类已经使用了命名空间,如果手动修改类库的命名空间工作量过大时,我们可以通过在行为中载入命名空间。

  • 比如我们需要引入https://gitee.com/yansongda/pay这个微信支付库处理类库。

  • 首先我们下载这个源码包,把源码包中的src中的代码拷贝到addons/mydemo/library/Yansongda这个目录下,如图:

首先我们在Mydemo.php中新增一个

/**
 * 应用初始化
 */
public function appInit()
{
    //先判断是否已经通过其它方式引入了此类
    if(!class_exists("\Yansongda\Pay\Pay")){
        \think\Loader::addNamespace('Yansongda\Pay', ADDON_PATH . 'mydemo' . DS . 'library' . DS . 'Yansongda' . DS);
    }
}
1
2
3
4
5
6
7
8
9
10

如图:

  • 最后我们再到后台管理右上角清下缓存即可。

  • 我们在通过行为载入命名空间时务必检查下第三方类库的命名空间使用的名称。比如我们打开Pay.php这个文件可以看到它的头部使用的命名空间是Yansongda\Pay,如图:

  • 因此我们在使用\think\Loader::addNamespace导入命名空间时的第一个参数要写Yansongda\Pay,如果命名空间导入不正确,后续都将不能正确的引入。

  • 类库的使用方法和上方手动引入类库的使用方法一致。

# 常见问题

  • 如果在引用时出现类未找到,请检查类的命名空间是否正确,其次请检查目录、文件、类名大小写是否正确。
  • 插件开发引用类库,请全部使用命名空间的方法,请勿使用require或include进行载入。