lukasss93 / laravel-model-settings
为您的 Laravel 应用程序提供模型设置
Requires
- php: ^8.0
- ext-json: *
- illuminate/cache: ^8.0|^9.0|^10.0|^11.0
- illuminate/config: ^8.0|^9.0|^10.0|^11.0
- illuminate/console: ^8.0|^9.0|^10.0|^11.0
- illuminate/database: ^8.0|^9.0|^10.0|^11.0
- illuminate/filesystem: ^8.0|^9.0|^10.0|^11.0
- illuminate/support: ^8.0|^9.0|^10.0|^11.0
Requires (Dev)
- friendsofphp/php-cs-fixer: ^3.6
- josiasmontag/laravel-redis-mock: ^1.2
- orchestra/testbench: ^6.0|^7.0|^8.0|^9.0
- pestphp/pest: ^1.0|^2.0
Suggests
- predis/predis: Required to use settings with Redis
This package is auto-updated.
Last update: 2024-09-16 01:04:38 UTC
README
Laravel 模型设置
为您的 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 模型
您的模型应使用 HasSettingsField
或 HasSettingsTable
特性。
选项 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)。有关更多信息,请参阅 许可证。