stepanenko3 / nova-settings
This Laravel Nova settings tool based on env, using nativ nova fields and resources
Installs: 10 935
Dependents: 0
Suggesters: 0
Security: 0
Stars: 32
Watchers: 3
Forks: 5
Open Issues: 6
Requires
- php: >=8.0
- laravel/nova: ^4.0
- spatie/laravel-activitylog: ^4.4.0
Requires (Dev)
- phpstan/phpstan: ^1.10
- tightenco/duster: ^2.7
This package is auto-updated.
Last update: 2024-11-11 09:27:58 UTC
README
Description
This Laravel Nova settings tool based on env, using nativ nova fields and resources
Features
- Using native Nova resources
- Fully responsive
- Dark mode support
- Support all packages. Like nova-tabs, activity-log, etc.
- Different settings depending on the current Env
- Separation of settings into different classes
- Customizable model and resource
Requirements
php: >=8.0
laravel/nova: ^4.0
Installation
# Install the package
composer require stepanenko3/nova-settings
Publish the config file:
php artisan vendor:publish --provider="Stepanenko3\NovaSettings\ToolServiceProvider" --tag="config"
Publish the migration file:
php artisan vendor:publish --provider="Stepanenko3\NovaSettings\ToolServiceProvider" --tag="migrations"
And run php artisan migrate
Next up, you must register the tool with Nova. This is typically done in the tools
method of the NovaServiceProvider
.
// in app/Providers/NovaServiceProvder.php // ... public function tools() { return [ // ... new \Stepanenko3\NovaSettings\NovaSettingsTool(), ]; }
Create your own configuration classes in app/Nova/Settings
// in app/Nova/Settings/Demo.php <?php namespace App\Nova\Settings; use Laravel\Nova\Fields\Boolean; use Stepanenko3\NovaSettings\Types\AbstractType; class Demo extends AbstractType { public function fields(): array { return [ Boolean::make('Param 1', 'param_1'), Boolean::make('Param 2', 'param_2'), Boolean::make('Param 3', 'param_3'), ]; } }
With Tabs
If you want to use eminiarts/nova-tabs
composer require eminiarts/nova-tabs
// in app/Nova/Settings/Demo.php <?php namespace App\Nova\Settings; use Eminiarts\Tabs\Tab; use Eminiarts\Tabs\Tabs; use Laravel\Nova\Fields\Boolean; use Stepanenko3\NovaSettings\Types\AbstractType; class Demo extends AbstractType { public function fields(): array { return [ Boolean::make('Param 1', 'param_1'), Boolean::make('Param 2', 'param_2'), Boolean::make('Param 3', 'param_3'), new Tabs('Tabs 1', [ new Tab('Tab 1', [ Boolean::make('Param 1', 'param_1'), Boolean::make('Param 2', 'param_2'), Boolean::make('Param 3', 'param_3'), ]), new Tab('Tab 2', [ Boolean::make('Param 1', 'param_1'), Boolean::make('Param 2', 'param_2'), Boolean::make('Param 3', 'param_3'), ]), new Tab('Tab 3', [ Boolean::make('Param 1', 'param_1'), Boolean::make('Param 2', 'param_2'), Boolean::make('Param 3', 'param_3'), ]), ]), ]; } }
Delcare your settings class in config/nova-settings.php
<?php return [ 'model' => \Stepanenko3\NovaSettings\Models\Settings::class, 'resource' => \Stepanenko3\NovaSettings\Resources\Settings::class, 'types' => [ \App\Nova\Settings\Demo::class, // Add this line ], ];
Usage
Click on the "Settings"
menu item in your Nova app to see the tool.
Use helper function for access the settings
// settings(string|null $section, string|null $key = null, string|null $default = null, string|null $env = null) settings('demo', 'key', 'defaultValue', config('app.env'))
Get cart_link
value from General
settings in current Env
settings('general', 'cart_link')
Get all General
settings
settings('general')
Get cart_link
value from General
settings in specific Env with default value
settings( section: 'general', key: 'cart_link', default: true, env: 'production' ); // OR settings('general', 'cart_link', true, 'production');
Configuration
All the configuration is managed from a single configuration file located in config/nova-settings.php
Extends default model
Create your own model that will extends \Stepanenko3\NovaSettings\Models\Settings
// in app/Models/Settings.php <?php namespace App\Models; use Spatie\Activitylog\LogOptions; use Spatie\Activitylog\Traits\LogsActivity; class Settings extends \Stepanenko3\NovaSettings\Models\Settings { use LogsActivity; public function getActivitylogOptions(): LogOptions { return LogOptions::defaults() ->logFillable() ->logOnlyDirty(); } }
Declare your model 'model' => \App\Models\Settings::class,
in config/nova-settings.php
Extends default Nova resource
Create your own resource that will extends \Stepanenko3\NovaSettings\Resources\Settings
// in app/Nova/Settings.php <?php namespace App\Nova; use Illuminate\Http\Request; use Laravel\Nova\Fields\HasMany; class Settings extends \Stepanenko3\NovaSettings\Resources\Settings { public function fields(Request $request) { return array_merge(parent::fields($request), [ HasMany::make('Activities', 'activities', 'App\Nova\ActivityLog'), ]); } }
Declare your resource 'resource' => \App\Nova\Settings::class,
in config/nova-settings.php
Don't forget to create App\Nova\ActivityLog
Using dependsOn with out package
Use the settings->
prefix in the attribute
parameter of the dependsOn
method.
It is also necessary to get data from FormData
with settings->
prefix
Select::make('Purchase Type', 'type') ->options([ 'personal' => 'Personal', 'gift' => 'Gift', ]), Text::make('Recipient') ->readonly() ->dependsOn( ['settings->type'], function (Text $field, NovaRequest $request, FormData $formData) { if ($formData->{'settings->type'} === 'gift') { $field->readonly(false)->rules(['required', 'email']); } } ),
Screenshots
Credits
Contributing
Thank you for considering contributing to this package! Please create a pull request with your contributions with detailed explanation of the changes you are proposing.
License
This package is open-sourced software licensed under the MIT license.