chapdel/model-settings-for-laravel

Laravel应用的模型设置

安装: 136

依赖关系: 0

建议者: 0

安全性: 0

星标: 1

关注者: 0

分支: 0

开放问题: 0

类型:laravel-package

v1.0 2023-02-16 19:24 UTC

This package is auto-updated.

Last update: 2024-09-16 23:19:30 UTC


README

laravel

Laravel应用的模型设置

Total Downloads
Latest Stable Version 'Github Actions Build Status Software License maintainability
StyleCI Scrutinizer Code Quality Scrutinizer Code Coverage
PHP Version

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

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

目录

安装

$ composer require glorand/laravel-model-settings
{
    "require": {
        "glorand/laravel-model-settings": "^4.0"
    }
}

环境(配置)变量 (.env 文件)

设置字段默认名称 - 当您使用 HasSettingsField

MODEL_SETTINGS_FIELD_NAME=settings

设置表默认名称 - 当您使用 HasSettingsTable

MODEL_SETTINGS_TABLE_NAME=model_settings

更新您的Eloquent模型

您的模型应该使用 HasSettingsFieldHasSettingsTable 特性。

选项1 - HasSettingsField 特性

运行 php artisan model-settings:model-settings-field 以创建一个迁移文件。
此命令将为指定的表创建一个json字段(默认名称 settings,来自配置)。

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

public $settingsFieldName = 'user_settings';

完整示例

use Glorand\Model\Settings\Traits\HasSettingsField;

class User extends Model
{
    use HasSettingsField;

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

    //define only if the model overrides the default connection
    protected $connection = 'mysql';

}

选项2 - HasSettingsTable 特性

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

use Glorand\Model\Settings\Traits\HasSettingsTable;

class User extends Model
{
    use HasSettingsTable;
}

选项3 - HasSettingsRedis 特性

use Glorand\Model\Settings\Traits\HasSettingsRedis;

class User extends Model
{
    use HasSettingsRedis;
}

默认设置

您可以在 model_settings.php 配置文件中为表设置默认配置。

return [
    // start other config options

    // end other config options

    // defaultConfigs
    'defaultSettings' => [
        'users' => [
            'key_1' => 'val_1',
        ]
    ]
];

或在您的模型本身中

use Glorand\Model\Settings\Traits\HasSettingsTable;

class User extends Model
{
    public $defaultSettings = [
        'key_1' => 'val_1',
    ];
}

请注意,如果在模型中定义了设置,则配置中的设置将不起作用,它们将被忽略。

使用方法

$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();

设置字段的持久性

如果字段设置为自动保存,则可配置。

default 的值是 true

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

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

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

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

设置数据的验证系统 <a name="validation>

当您使用 set() 或 apply()|update() 方法并违反规则时,会抛出异常。您可以使用 $settingsRules 公共属性在模型上定义规则,并且规则数组的定义与 Laravel 默认验证规则相同。(查看 Laravel 规则

class User extends Model
{
    use HasSettingsTable;

    public array $defaultSettings = [
        'user' => [
            'name' => 'Test User',
            'email' => 'user@test.com'
            'age' => 27,
        ],
        'language' => 'en',
        'max_size' => 12,
    ];

    // settings rules
    public array $settingsRules = [
        'user' => 'array',
        'user.email' => [
            'string',
            'email',
        ],
        'user.age' => 'integer',
        'language' => 'string|in:en,es,it|max:2',
        'max_size' => 'int|min:5|max:15',
    ];
}

变更日志

请参阅 CHANGELOG 了解最近更改的详细信息。

贡献

请参阅 CONTRIBUTING 了解详细信息。

许可

MIT 许可证 (MIT)。请参阅 LICENSE 了解更多信息。

相关内容