ubmvn/laravel-settings

Laravel 应用程序与模型设置

v1.0.0 2022-09-04 05:15 UTC

This package is auto-updated.

Last update: 2024-09-04 14:54:34 UTC


README

Latest Version on Packagist GitHub Tests Action Status Total Downloads

此软件包允许您将应用程序范围或特定模型的 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 特性

  1. 首先准备您的模型
use Ubmvn\Settings\HasSettings;

class User extends Model
{
    use HasSettings;    
}
  1. 现在您可以在该模型上调用 settings() 方法。这相当于 Settings::for($model)
$user->settings()->set('k1', 'v1');
...

自定义仓库

如果您不想使用数据库仓库,可以轻松创建自己的设置仓库。为此

  1. 创建一个实现 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(){
        //
    }
}
  1. 在设置配置文件中,将您自己的仓库配置添加到 repositories 属性中
    'repositories' => [
        ...
        
        'file' => [
            ...
        ]
    ],
  1. 将设置配置文件中的默认仓库更改为您自己的仓库实现

自定义转换

该软件包允许您轻松创建任何对象类型的自定义转换规则。

  1. 创建实现 Castable 接口的自己的转换类。

注意:当条目的值被存储到仓库中时,将调用 set 方法,当值从仓库中检索时,将调用 get 方法。

use Ubmvn\Settings\Contracts\Castable;

class CustomCast implements Castable
{
    public function set($payload){
        //
    }
    
    public function get($payload){
        //
    }}
  1. 将转换添加到 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)。有关更多信息,请参阅许可证文件