install plugin

This commit is contained in:
Edward Yang 2022-07-01 14:40:26 +08:00
parent 6b1663f54b
commit f75848afcf
3 changed files with 59 additions and 13 deletions

View File

@ -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("编辑成功");

View File

@ -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;
}
/**
* 获取插件目录以及配置
*

View File

@ -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();
}
/**
* 判断插件是否安装
*