ubmvn / laravel-settings
Laravel 应用程序与模型设置
Requires
- php: ^7.4|^8.0
- ext-json: *
- illuminate/database: ^8.0
- illuminate/support: ^8.0
Requires (Dev)
- mockery/mockery: ^1.4
- orchestra/testbench: ^5.0|^6.0
- phpunit/phpunit: ^9.1
README
此软件包允许您将应用程序范围或特定模型的 Laravel 设置存储到数据库中。设置值将被转换并正确存储。您还可以定义自己的转换并存储仓库。
此软件包从 https://github.com/iamohd/laravel-settings 分支而来,用于 Laravel 8.x。感谢 Mohammed Isa。
安装
通过 composer 安装该软件包
composer require ubmvn/laravel-settings
使用以下命令发布配置文件
php artisan vendor:publish --provider="Ubmvn\Settings\SettingsServiceProvider" --tag="config"
使用以下命令发布迁移文件
php artisan vendor:publish --provider="Ubmvn\Settings\SettingsServiceProvider" --tag="migration"
最后,运行迁移
php artisan migrate
用法
该软件包提供各种 API 来访问设置管理器。您可以使用 Settings 门面、settings() 辅助方法或通过模型上的 HasSettings 特性来访问它。
存储设置
您可以设置单个条目或多个设置条目。对象的值将根据 settings.php 配置文件中定义的规则进行转换。
- 单个条目
Settings::set('key', 'value');
- 多个条目
您可以通过传递键值对的关联数组来设置多个设置条目。将应用转换到所有有效负载,即使是嵌套数组。
Settings::set([ 'k1' => Carbon::now(), 'k2' => [ 'k3' => $user, 'k4' => [ 'k5' => $model ], ] ]);
- 指定设置组
通过调用 group 方法,您可以按类别对设置进行分类。
Settings::group('name')->set('key', 'value'); Settings::group('name')->set([ 'k1' => 'v1', 'k2' => 'v2', ]);
- 模型特定设置
通过调用 for 方法,也可以为特定模型设置设置。
Settings::for($model)->set('key', 'value'); Settings::for($model)->set([ 'k1' => 'v1', 'k2' => 'v2', ]);
- 混合过滤器
您可以像这样混合所有过滤器
Settings::for($model)->group('name')->set('key', 'value');
检索设置
您可以检索一个或多个条目,并在不存在时指定默认值。
- 单个条目
Settings::get('k1', 'default');
- 多个条目
如果条目键不存在,则将默认值放置在它上面
Settings::get(['k1', 'k2', 'k3'], 'default');
- 所有条目
如果您想检索所有条目,只需调用 all 方法。您还可以指定模型或组。还可以排除一些特定的键。
注意:请记住,在没有指定组或模型的情况下检索所有条目,将检索没有设置组或模型的条目。您可以将其视为(全局应用程序设置)。
Settings::all(); Settings::for($model)->all(); Settings::for($model)->group('name')->all(); Settings::except('k1', 'k2')->for($model)->group('name')->all(); Settings::except('k1')->for($model)->group('name')->all();
辅助方法
该软件包还提供设置辅助方法,您可以使用它而不是使用 Settings 门面
settings()->set('key', 'value'); ...
HasSettings 特性
您还可以在 Eloquent 模型上使用 HasSettings 特性
- 首先准备您的模型
use Ubmvn\Settings\HasSettings; class User extends Model { use HasSettings; }
- 现在您可以在该模型上调用 settings() 方法。这相当于
Settings::for($model)
$user->settings()->set('k1', 'v1'); ...
自定义仓库
如果您不想使用数据库仓库,可以轻松创建自己的设置仓库。为此
- 创建一个实现 Repository 接口的仓库类,并实现以下方法
use Ubmvn\Settings\Contracts\Repository; class FileRepository implements Repository { public function get($key,$default = null){ // } public function set($key,$value = null){ // } public function forget($key){ // } public function all(){ // } }
- 在设置配置文件中,将您自己的仓库配置添加到 repositories 属性中
'repositories' => [ ... 'file' => [ ... ] ],
- 将设置配置文件中的默认仓库更改为您自己的仓库实现
自定义转换
该软件包允许您轻松创建任何对象类型的自定义转换规则。
- 创建实现 Castable 接口的自己的转换类。
注意:当条目的值被存储到仓库中时,将调用 set 方法,当值从仓库中检索时,将调用 get 方法。
use Ubmvn\Settings\Contracts\Castable; class CustomCast implements Castable { public function set($payload){ // } public function get($payload){ // }}
- 将转换添加到 settings 配置文件中转换数组的数组中
'casts' => [ ... CustomDataType::class => CustomCast::class ]
注意:如果您想向转换传递参数,可以设置转换的对象而不是转换类名
'casts' => [ ... CustomDataType::class => new CustomCast('param') ]
设置缓存
您可以在 settings.php 配置文件中轻松启用或禁用缓存设置。您还可以指定要使用的缓存存储。
'cache' => [ 'enabled' => env('SETTINGS_CACHE_ENABLED', false), 'store' => null, 'prefix' => null, ],
测试
要运行该包的测试,只需调用以下命令:
composer test
变更日志
有关最近更改的更多信息,请参阅变更日志。
致谢
替代方案
许可证
MIT许可证(MIT)。有关更多信息,请参阅许可证文件。