stepanenko3/nova-settings

基于env的Laravel Nova设置工具,使用原生nova字段和资源

v1.1.2 2024-03-31 19:56 UTC

README

Latest Version on Packagist Total Downloads License

screenshot of tool

描述

基于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注册此工具。通常在NovaServiceProvidertools方法中完成此操作。

// 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']);
            }
        }
    ),

屏幕截图

screenshot of tool

鸣谢

贡献

感谢您考虑为这个包做出贡献!请创建一个带有详细更改说明的pull request。

许可证

此包是开源软件,许可协议为MIT许可证