diff --git a/beike/Admin/Http/Controllers/PluginController.php b/beike/Admin/Http/Controllers/PluginController.php index 26f6782e..12334c5a 100644 --- a/beike/Admin/Http/Controllers/PluginController.php +++ b/beike/Admin/Http/Controllers/PluginController.php @@ -11,6 +11,7 @@ namespace Beike\Admin\Http\Controllers; +use Beike\Repositories\PluginRepo; use Exception; use Beike\Plugin\Manager; use Illuminate\Http\Request; @@ -38,8 +39,8 @@ class PluginController extends Controller */ public function install(Request $request, $code): array { - $plugin = (new Manager)->getPlugin($code); - // dd($plugin); + $plugin = (new Manager)->getPluginOrFail($code); + PluginRepo::installPlugin($plugin); return json_success("安装成功"); } @@ -52,8 +53,8 @@ class PluginController extends Controller */ public function uninstall(Request $request, $code): array { - $plugin = (new Manager)->getPlugin($code); - // dd($plugin); + $plugin = (new Manager)->getPluginOrFail($code); + PluginRepo::uninstallPlugin($plugin); return json_success("卸载成功"); } @@ -66,7 +67,7 @@ class PluginController extends Controller */ public function edit(Request $request, $code): View { - $data['plugin'] = (new Manager)->getPlugin($code); + $data['plugin'] = (new Manager)->getPluginOrFail($code); return view('admin::pages.plugins.form', $data); } @@ -79,10 +80,7 @@ class PluginController extends Controller */ public function update(Request $request, $code): array { - $plugin = (new Manager)->getPlugin($code); - if (empty($plugin)) { - throw new Exception("无效的插件"); - } + (new Manager)->getPluginOrFail($code); $fields = $request->all(); SettingRepo::update('plugin', $code, $fields); return json_success("编辑成功"); @@ -97,10 +95,7 @@ class PluginController extends Controller */ public function updateStatus(Request $request, $code): array { - $plugin = (new Manager)->getPlugin($code); - if (empty($plugin)) { - throw new Exception("无效的插件"); - } + (new Manager)->getPluginOrFail($code); $status = $request->get('status'); SettingRepo::update('plugin', $code, ['status' => $status]); return json_success("编辑成功"); diff --git a/beike/Plugin/Manager.php b/beike/Plugin/Manager.php index 896a7f9f..203d5c6e 100644 --- a/beike/Plugin/Manager.php +++ b/beike/Plugin/Manager.php @@ -76,6 +76,20 @@ class Manager return $plugins[$code] ?? null; } + /** + * 获取单个插件 + * + * @throws \Exception + */ + public function getPluginOrFail($code): ?Plugin + { + $plugin = $this->getPlugin($code); + if (empty($plugin)) { + throw new \Exception('无效的插件'); + } + return $plugin; + } + /** * 获取插件目录以及配置 * diff --git a/beike/Repositories/PluginRepo.php b/beike/Repositories/PluginRepo.php index 83ec4f43..1facf1e4 100644 --- a/beike/Repositories/PluginRepo.php +++ b/beike/Repositories/PluginRepo.php @@ -18,6 +18,43 @@ class PluginRepo { public static $installedPlugins; + + /** + * 安装插件到系统: 插入数据 + * @param $plugin + */ + public static function installPlugin($plugin) + { + $type = $plugin->type; + $code = $plugin->code; + $plugin = Plugin::query() + ->where('type', $type) + ->where('code', $code) + ->first(); + if (empty($plugin)) { + Plugin::query()->create([ + 'type' => $type, + 'code' => $code, + ]); + } + } + + + /** + * 从系统卸载插件: 删除数据 + * @param $plugin + */ + public static function uninstallPlugin($plugin) + { + $type = $plugin->type; + $code = $plugin->code; + Plugin::query() + ->where('type', $type) + ->where('code', $code) + ->delete(); + } + + /** * 判断插件是否安装 *