lukasss93/laravel-model-settings

为您的 Laravel 应用程序提供模型设置

安装: 265

依赖关系: 0

建议者: 0

安全: 0

星标: 3

关注者: 1

分支: 1

开放问题: 0

类型:laravel-package

6.2.0 2024-03-15 23:48 UTC

This package is auto-updated.

Last update: 2024-09-16 01:04:38 UTC


README

logo

Laravel 模型设置

version downloads license php

Test Maintainability Test Coverage

为您的 Laravel 应用程序提供模型设置

此包需要 PHP ^8.0 并遵循 FIG 标准 PSR-1, PSR-2, PSR-4 和 PSR-12,以确保共享 PHP 之间的高度互操作性。

可以通过遵循我们的 贡献指南 提交错误报告、功能请求和拉取请求。

⚠️ 分支仓库

此包是 glorand/laravel-model-settings 的分支,包含一些破坏性更改,使其更具灵活性和易于使用。

此包与原始包之间的更改列表

  • 增加了在模型创建时初始化设置的功能
  • 重新添加了对 Laravel 8 的支持
  • defaultSettings 属性转换为 方法
  • settingsRules 属性转换为 方法
  • PHPUnit 测试转换为 PestPHP 测试
  • Glorand\Model\Settings 命名空间重命名为 Lukasss93\ModelSettings
  • model_settings.php 配置文件中删除了 defaultSettings

🚀 安装

composer require lukasss93/laravel-model-settings

⚙ 发布配置文件

发布配置文件是可选的

php artisan vendor:publish --provider="Lukasss93\ModelSettings\ModelSettingsServiceProvider"

🌈 更新您的 Eloquent 模型

您的模型应使用 HasSettingsFieldHasSettingsTable 特性。

选项 1 - HasSettingsField 特性

运行 php artisan model-settings:model-settings-field 以创建一个表迁移文件。
此命令将为指定的表创建一个 JSON 字段(默认名称 settings,来自配置)。
字段的默认名称为 settings;如果您想重写默认名称,请更改配置或环境变量值 MODEL_SETTINGS_FIELD_NAME在运行命令之前!

您可以选择默认以外的名称,在这种情况下,您必须在模型中指定它。

public $settingsFieldName = 'user_settings';

完整示例

use Lukasss93\ModelSettings\Traits\HasSettingsField;

class User extends Model
{
    use HasSettingsField;

    //define only if you select a different name from the default
    public $settingsFieldName = 'user_settings';
}

选项 2 - HasSettingsTable 特性

在运行命令 php artisan model-settings:model-settings-table 之前运行。
此命令将为您复制创建存储设置值的表的迁移类。
表的默认名称为 model_settings;如果您想重写默认名称,请更改配置或环境变量值 MODEL_SETTINGS_TABLE_NAME在运行命令之前!

use Lukasss93\ModelSettings\Traits\HasSettingsTable;

class User extends Model
{
    use HasSettingsTable;
}

选项 3 - HasSettingsRedis 特性

use Lukasss93\ModelSettings\Traits\HasSettingsRedis;

class User extends Model
{
    use HasSettingsRedis;
}

👓 使用方法

$user = App\User::first();

检查实体设置的值是否为空

$user->settings()->empty();

检查设置(存在)

$user->settings()->exist();

获取所有模型设置

$user->settings()->all();
$user->settings()->get();

获取特定设置

$user->settings()->get('some.setting');
$user->settings()->get('some.setting', 'default value');
//multiple
$user->settings()->getMultiple(
	[
		'some.setting_1',
		'some.setting_2',
	],
	'default value'
);

添加/更新设置

$user->settings()->apply((array)$settings);
$user->settings()->set('some.setting', 'new value');
$user->settings()->update('some.setting', 'new value');
//multiple
$user->settings()->setMultiple([
	'some.setting_1' => 'new value 1',
	'some.setting_2' => 'new value 2',
]);

检查模型是否具有特定设置

$user->settings()->has('some.setting');

从模型中删除设置

$user->settings()->delete('some.setting');
//multiple
$user->settings()->deleteMultiple([
	'some.setting_1',
	'some.setting_2',
]);
//all
$user->settings()->clear();

⬇ 设置字段的持久性

对于字段设置,自动保存是可配置的。

默认值为 true

  • 使用模型上的属性
protected $persistSettings = true; //boolean
  • 环境变量 (.env)
MODEL_SETTINGS_PERSISTENT=true
  • 配置值 - 模型设置配置文件
'settings_persistent' => env('MODEL_SETTINGS_PERSISTENT', true),

如果持久性为 false,您必须在操作后保存模型。

🛠️ 使用除 settings() 之外的其他方法名

如果您想使用除 settings 之外的其他名称,可以通过定义 $invokeSettingsBy 属性来实现。这将转发调用(如 configurations())到 settings() 方法。

🌠 默认设置

您可以为模型设置默认配置

use Lukasss93\ModelSettings\Traits\HasSettingsTable;

class User extends Model
{
    use HasSettingsTable;
    
    public function defaultSettings(): array
    {
        return [
            'foo' => 'bar',
        ];
    }
}

🎉 在模型创建时初始化设置

您可以在模型创建时通过在模型中定义 initSettings 属性来初始化设置。

use Lukasss93\ModelSettings\Traits\HasSettingsTable;

class User extends Model
{
    use HasSettingsTable;
    
    public bool $initSettings = true;
    
    public function defaultSettings(): array
    {
        return [
            'foo' => 'bar',
        ];
    }
}

🔍 设置数据的验证系统

当您使用 set()apply()update() 方法时,若违反规则则会抛出异常。
您可以使用模型的 settingsRules 公共方法来定义规则,规则数组的定义与 Laravel 默认的 验证规则 相同。

class User extends Model
{
    use HasSettingsTable;

    public function defaultSettings(): array
    {
        return [
            'info' => [
                'email' => 'user@test.com'
                'age' => 27,
            ],
            'language' => 'en',
            'max_size' => 12,
        ];
    }

    public function settingsRules(): array
    {
        return [
            'info' => 'array',
            'info.email' => ['string','email'],
            'info.age' => 'integer',
            'language' => 'string|in:en,es,it|max:2',
            'max_size' => 'int|min:5|max:15',
        ];
    }
}

📃 更新日志

有关最近更改的更多信息,请参阅 更新日志

📖 许可证

MIT 许可证 (MIT)。有关更多信息,请参阅 许可证