第三方类
在FastAdmin应用插件开发过程中经常需要引用于第三方的类,此时可以采用以下两种方式进行引入。
手动修改文件命名空间
如果我们引入的第三方类文件比较少,我们可以采取手动修改文件命名空间的办法。例如我们需要引入HashMap.php这个类,这个类功能比较单一,只有一个文件,此时我们可以将HashMap.php文件放在addons/mydemo/library目录下,然后再修改HashMap.php中的namespace,修改为
<?php
namespace addons\mydemo\library;
class HashMap
{
//普通方法
public function myNormalMethod(){
}
//静态方法
public static function myStaticMethod(){
}
}其中mydemo为你的插件目录名。
通过以上修改后,我们在我们的服务端任何位置均可使用
$hashMap = new \addons\mydemo\library\HaspMap();
$result = $hashMap->myNormalMethod();来实例化我们的类,静态方法可以通过
$result = \addons\mydemo\library\HashMap::myStaticMethod();其中myNormalMethod为HaspMap的公共方法,myStaticMethod为HashMap的静态方法。
通过行为载入命名空间
如果我们引入的第三方类是一个composer包,或者说这个类已经使用了命名空间,如果手动修改类的命名空间工作量过大时,我们可以通过在行为中载入命名空间。
比如我们需要引入https://gitee.com/yansongda/pay这个微信支付库处理类。
首先我们下载这个源码包,把源码包中的src中的代码拷贝到addons/mydemo/library/Yansongda这个目录下,如图:
首先我们在addons/mydemo/Mydemo.php中新增一个
/**
* 应用初始化
*/
public function appInit()
{
//先判断是否已经通过其它方式引入了此类
if(!class_exists("\Yansongda\Pay\Pay")){
\think\Loader::addNamespace('Yansongda\Pay', ADDON_PATH . 'mydemo' . DS . 'library' . DS . 'Yansongda' . DS);
}
}如图:
最后我们再到后台管理右上角清下缓存即可。
我们在通过行为载入命名空间时务必检查下第三方类的命名空间使用的名称。比如我们打开Pay.php这个文件可以看到它的头部使用的命名空间是Yansongda\Pay,如图:
因此我们在使用\think\Loader::addNamespace导入命名空间时的第一个参数要写Yansongda\Pay,如果命名空间导入不正确,后续都将不能正确的引入。
类的使用方法和上方手动引入类的使用方法一致。
常见问题
- 如果在引用时出现类未找到,请检查类的命名空间是否正确,其次请检查目录、文件、类名大小写是否正确。
- 插件开发引用类,请全部使用命名空间的方法,请勿使用
require或include进行载入。