improve plugin store

This commit is contained in:
xiaomlove
2025-05-05 18:24:17 +07:00
parent 5b71976624
commit fb88455323
15 changed files with 282 additions and 55 deletions
+14 -1
View File
@@ -27,7 +27,7 @@ abstract class BasePlugin extends BaseRepository
public function checkMainApplicationVersion()
{
$constantName = "static::COMPATIBLE_VERSION";
$constantName = "static::COMPATIBLE_NP_VERSION";
if (defined($constantName) && version_compare(VERSION_NUMBER, constant($constantName), '<')) {
throw new \RuntimeException(sprintf(
"NexusPHP version: %s is too low, this plugin require: %s",
@@ -57,4 +57,17 @@ abstract class BasePlugin extends BaseRepository
{
return Plugin::getById(static::ID);
}
public function getVersion(): string
{
$constantName = "static::VERSION";
return defined($constantName) ? constant($constantName) : '';
}
public function getId(): string
{
$className = str_replace("Repository", "", get_called_class());
$plugin = call_user_func([$className, "make"]);
return $plugin->getId();
}
}
+13 -6
View File
@@ -5,6 +5,9 @@ class Plugin
{
private static mixed $providers = null;
/**
* @var BasePlugin[]
*/
private static array $plugins = [];
// public function __construct()
@@ -28,7 +31,7 @@ class Plugin
$result = [];
//plugins are more exactly
foreach (self::$plugins as $id => $plugin) {
$result[$id] = 1;
$result[$id] = $plugin->getVersion();
}
return $result;
}
@@ -60,15 +63,19 @@ class Plugin
if ($parts[0] == 'NexusPlugin') {
$className = str_replace('ServiceProvider', 'Repository', $provider);
if (class_exists($className)) {
$constantName = "$className::COMPATIBLE_VERSION";
$constantName = "$className::COMPATIBLE_NP_VERSION";
if (defined($constantName) && version_compare(VERSION_NUMBER, constant($constantName), '<')) {
continue;
}
/**
* @var BasePlugin $className
*/
$plugin = new $className;
$pluginIdName = "$className::ID";
if (defined($pluginIdName)) {
self::$plugins[constant($pluginIdName)] = $plugin;
}
// $pluginIdName = "$className::ID";
// if (defined($pluginIdName)) {
// self::$plugins[constant($pluginIdName)] = $plugin;
// }
self::$plugins[$plugin->getId()] = $plugin;
call_user_func([$plugin, 'boot']);
}
}