walidos/laravel-settings

Laravel应用及模型设置

2.2 2024-07-21 14:04 UTC

This package is auto-updated.

Last update: 2024-09-21 15:37:23 UTC


README

Latest Version on Packagist GitHub Tests Action Status Total Downloads

此包允许您存储全局和模型特定的Laravel设置。设置值会被类型转换并正确存储。您也可以定义自己的转换规则并存储仓库。

安装

通过composer安装此包

composer require smartisan/laravel-settings

使用以下命令发布配置文件

php artisan vendor:publish --provider="Smartisan\Settings\SettingsServiceProvider" --tag="config"

使用以下命令发布迁移文件

php artisan vendor:publish --provider="Smartisan\Settings\SettingsServiceProvider" --tag="migrations"

最后,使用以下命令运行迁移

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

忘记条目

您可以通过调用forget方法删除条目。

Settings::forget('key');

Settings::for($model)->group('name')->forget('key');

确定存在性

您可以确定给定的设置条目键是否存在或不存在。

Settings::exist('key');

Settings::for($model)->exist('key');

Settings::for($model)->group('name')->exist('key');

辅助方法

该包还提供了一种设置辅助方法,您可以使用它而不是使用Settings外观。

settings()->set('key', 'value');
...

HasSettings特质

您还可以在Eloquent模型上使用HasSettings特质。

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

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

自定义仓库

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

  1. 创建一个实现Repository接口的仓库类,并实现以下方法
use Smartisan\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接口的cast类。

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

use Smartisan\Settings\Contracts\Castable;

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