Model Settings plugin screenshot
Dark mode ready
Multilingual support
Supports v5.x

Model Settings

Filament support for model based settings with Glorand's Laravel Model Settings.

Tags: Forms Panels
Supported versions:
3.x
Quadrubo avatar Author: Quadrubo

Documentation

Latest Version on Packagist GitHub Tests Action Status GitHub Code Style Action Status Total Downloads

This package utilizes glorand/laravel-model-settings to incorporate model-specific settings into Filament. For instance, you can implement individualized settings for each user in your Filament application.

#Installation

You can install the package via composer:

composer require quadrubo/filament-model-settings

Optionally, you can publish the views using

php artisan vendor:publish --tag="filament-model-settings-views"

#Usage

You should start by setting up your eloquent model.
Important: You should read the Instructions of the glorand/laravel-model-settings to find out how to do this.

#Seperate Settings Page

Then you can start by generating a settings page.

php artisan make:filament-model-settings-page ManagePreferences

In your new settings page class, generated in the app/Filament/{Panel}/Pages directory, you should fill the getSettingsRecord() function. For example, to make user specific settings, simply return the currently active user:

public static function getSettingRecord()
{
    return auth()->user();
}

You should also edit the form() function to create the fields for your settings. For example, if you have the setting theme you can do this:

public function form(Form $form): Form
{
    return $form
        ->schema([
            Forms\Components\Select::make('theme')
                ->options([
                    'dark' => 'Dark Mode',
                    'light' => 'Light Mode',
                    'high_contrast' => 'High Contrast',
                ]),
        ]);
}

#Using the Page in the user menu

If you want to use this page in filaments user menu, you can create an entry in your panel provider.

use App\Filament\Admin\Pages\ManagePreferences;

class AdminPanelProvider extends PanelProvider
{
    public function panel(Panel $panel): Panel
    {
        return $panel
            ->
            ...
            ->userMenuItems([
                MenuItem::make()
                    ->label('Settings')
                    ->url(fn (): string => ManagePreferences::getUrl())
                    ->icon('heroicon-o-cog-6-tooth'),
            ]);
    }
}

You may also want to hide the page in the sidebar.

namespace App\Filament\Admin\Pages;

class ManagePreferences extends ModelSettingsPage implements HasModelSettings
{
    public static function shouldRegisterNavigation(): bool
    {
        return false;
    }
}

#Settings within your existing Resouce

The settings can also be used in your existing resource. If, for example you have a school model with the settings color and can_add_students.

namespace App\Models;

use Glorand\Model\Settings\Traits\HasSettingsField;

class School extends Model
{
    use HasSettingsField;

    public $defaultSettings = [
        'color' => '#ff0000',
        'can_add_students' => true,
    ];
}

You can then use the provided macro isModelSetting() to use these settings inside your resource.

namespace App\Filament\Resources;

class SchoolResource extends Resource
{
    public static function form(Form $form): Form
    {
        return $form
            ->schema([
                Forms\Components\ColorPicker::make('settings.color_1')
                    ->isModelSetting(),
                Forms\Components\Toggle::make('settings.can_add_students')
                    ->isModelSetting(),
            ]);
    }
}

In case you changed your column name for the settings, you should provide that to isModelSetting as a prefix.

Forms\Components\Toggle::make('school_stuff.can_add_students')
    ->isModelSetting('school_stuff'),

#Testing

composer test

#Inspiration

This package is heavily inspired by the official Spatie Laravel Settings Plugin for filament and basically just implements a few changes to make it compatible with glorand/laravel-model-settings.

#Changelog

Please see CHANGELOG for more information on what has changed recently.

#Contributing

Please see CONTRIBUTING for details.

#Security Vulnerabilities

Please review our security policy on how to report security vulnerabilities.

#Credits

#License

The MIT License (MIT). Please see License File for more information.

The author

Quadrubo avatar Author: Quadrubo

I'm a web developer based in Germany and am currently focused on the TALL stack. In my free time, I enjoy skiing and riding rollercoasters :)

Plugins
1
Stars
24