glorand / laravel-model-settings
为您的 Laravel 应用程序设置模型
Requires
- php: ^8.1
- ext-json: *
- illuminate/cache: ^10.0|^11.0
- illuminate/config: ^10.0|^11.0
- illuminate/console: ^10.0|^11.0
- illuminate/database: ^10.0|^11.0
- illuminate/filesystem: ^10.0|^11.0
- illuminate/support: ^10.0|^11.0
Requires (Dev)
- friendsofphp/php-cs-fixer: ^3.14
- josiasmontag/laravel-redis-mock: ^1.2
- orchestra/testbench: ^8.0|^9.0
- phpunit/phpunit: ^10.5|^11.0
Suggests
- predis/predis: Required to use settings with Redis
This package is auto-updated.
Last update: 2024-09-13 11:57:44 UTC
README
为您的 Laravel 应用程序设置模型
该包需要 PHP 8.1+ 并遵循 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 模型
您的模型应使用 HasSettingsField
或 HasSettingsTable
特性。
选项 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();
设置字段的持久化
在字段设置的情况下,自动保存是可配置的。
默认
值是 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 了解更多信息。