add interface function to auto fill plugin settings form

This commit is contained in:
Boy132
2026-07-14 10:25:00 +02:00
parent 1f2ff09a8b
commit e0f38a8c99
3 changed files with 21 additions and 0 deletions

View File

@@ -6,6 +6,11 @@ use Filament\Schemas\Components\Component;
interface HasPluginSettings
{
/**
* @return array<string, mixed>
*/
public function getSettingsFormData(): array;
/**
* @return Component[]
*/

View File

@@ -113,6 +113,7 @@ class PluginResource extends Resource
->color('primary')
->visible(fn (Plugin $plugin) => $plugin->status === PluginStatus::Enabled && $plugin->hasSettings())
->schema(fn (Plugin $plugin) => $plugin->getSettingsForm())
->fillForm(fn (Plugin $plugin) => $plugin->getSettingsFormData())
->action(fn (array $data, Plugin $plugin) => $plugin->saveSettings($data))
->slideOver(),
ActionGroup::make([

View File

@@ -335,6 +335,21 @@ class Plugin extends Model implements HasPluginSettings
return false;
}
/** @return array<string, mixed> */
public function getSettingsFormData(): array
{
try {
$pluginObject = new ($this->fullClass());
if ($pluginObject instanceof HasPluginSettings) {
return $pluginObject->getSettingsFormData();
}
} catch (Exception) {
}
return [];
}
/** @return Component[] */
public function getSettingsForm(): array
{