stepanenko3 / nova-settings
基于env的Laravel Nova设置工具,使用原生nova字段和资源
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-08-31 14:34:40 UTC
README
描述
基于env的Laravel Nova设置工具,使用原生nova字段和资源
功能
- 使用原生Nova资源
- 完全响应式
- 支持暗黑模式
- 支持所有包。例如nova-tabs,activity-log等。
- 根据当前环境的不同设置不同的配置
- 将设置分离到不同的类中
- 自定义模型和资源
要求
php: >=8.0
laravel/nova: ^4.0
安装
# Install the package
composer require stepanenko3/nova-settings
发布配置文件
php artisan vendor:publish --provider="Stepanenko3\NovaSettings\ToolServiceProvider" --tag="config"
发布迁移文件
php artisan vendor:publish --provider="Stepanenko3\NovaSettings\ToolServiceProvider" --tag="migrations"
然后运行 php artisan migrate
接下来,您必须使用Nova注册此工具。通常在NovaServiceProvider
的tools
方法中完成此操作。
// in app/Providers/NovaServiceProvder.php // ... public function tools() { return [ // ... new \Stepanenko3\NovaSettings\NovaSettingsTool(), ]; }
在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'), ]; } }
带有标签页
如果您想使用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'), ]), ]), ]; } }
在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 ], ];
用法
点击Nova应用程序中的“设置”菜单项以查看工具。
使用辅助函数访问设置
// settings(string|null $section, string|null $key = null, string|null $default = null, string|null $env = null) settings('demo', 'key', 'defaultValue', config('app.env'))
从当前环境中的“通用”设置获取cart_link
值
settings('general', 'cart_link')
获取所有“通用”设置
settings('general')
从指定环境的“通用”设置获取cart_link
值,并具有默认值
settings( section: 'general', key: 'cart_link', default: true, env: 'production' ); // OR settings('general', 'cart_link', true, 'production');
配置
所有配置都通过位于config/nova-settings.php
的单个配置文件进行管理
扩展默认模型
创建将扩展\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(); } }
在config/nova-settings.php
中声明您的模型 'model' => \App\Models\Settings::class,
扩展默认Nova资源
创建将扩展\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'), ]); } }
在config/nova-settings.php
中声明您的资源 'resource' => \App\Nova\Settings::class,
别忘了创建 App\Nova\ActivityLog
使用不带包的dependsOn
在dependsOn
方法的attribute
参数中使用settings->
前缀。还需要使用settings->
前缀从FormData
获取数据
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']); } } ),
屏幕截图
鸣谢
贡献
感谢您考虑为这个包做出贡献!请创建一个带有详细更改说明的pull request。
许可证
此包是开源软件,许可协议为MIT许可证。