下方是fastadmin插件管理的核心类库
use think\addons\AddonException;
use think\addons\Service;
get_addon_list这个获取插件列表的函数在 /vendor/karsonzhang/fastadmin-addons/src/common.php中
get_addon_list
遍历插件目录(可以使用 php内置函数scandir)
获取有效插件(所谓有效插件即符合开发者制定的一套开发规范)
将获取插件列表封装成方法或函数,放到公共文件中。在这里咱们直接将其封装到插件库的函数库中,以便后期的使用。
//获取已安装的插件列表
$addons = get_addon_list();
foreach ($addons as $k => &$v) {
//获取插件配置
$config = get_addon_config($v['name']);
$v['config'] = $config ? 1 : 0;
$v['url'] = str_replace($this->request->server('SCRIPT_NAME'), '', $v['url']);
}
$this->assignconfig(['addons' => $addons, 'api_url' => config('fastadmin.api_url'), 'faversion' => config('fastadmin.version'), 'domain' => request()->host(true)]);
return $this->view->fetch();
这里的远程安装的话,远程服务器是在配置文件里面、获取是在 /vendor/karsonzhang/fastadmin-addons/src/addons/Service.php的getServerUrl方法
下载插件
解压压缩包到插件目录
$uid = $this->request->post("uid");
$token = $this->request->post("token");
$version = $this->request->post("version");
$faversion = $this->request->post("faversion");
$extend = [
'uid' => $uid,
'token' => $token,
'version' => $version,
'faversion' => $faversion
];
// * @param string $name 插件名称
// * @param boolean $force 是否覆盖
// * @param array $extend 扩展参数
$info = Service::install($name, $force, $extend);
Service::uninstall($name, $force);
if ($tables) {
$prefix = Config::get('database.prefix');
//删除插件关联表
foreach ($tables as $index => $table) {
//忽略非插件标识的表名
if (!preg_match("/^{$prefix}{$name}/", $table)) {
continue;
}
Db::execute("DROP TABLE IF EXISTS `{$table}`");
}
}
// 插件缓存
Service::refresh();
if ($type == 'addons') {
break;
}