hackeresq/laravel-settings

为 Laravel 8+ 提供的超简单键值设置

v3.2.1 2023-04-12 23:12 UTC

README

Latest Version on Packagist Total Downloads Software License

为 Laravel 提供的超简单键值设置,原生支持加密多租户

安装

本包可用于 Laravel 8.0+。

您可以通过 composer 安装此包

composer require hackeresq/laravel-settings

自 Laravel 5.5+ 以来,服务提供者和别名将自动注册,您可以跳过此步骤。要使用旧版本,请使用版本 < 2.0 的发布版。

您可以通过发布 迁移配置 文件,然后使用以下方法一次性迁移新的设置表

php artisan vendor:publish --provider="HackerESQ\Settings\SettingsServiceProvider" --tag=migrations && php artisan vendor:publish --provider="HackerESQ\Settings\SettingsServiceProvider" --tag=config && php artisan migrate

成功! laravel-settings 已安装!

使用

可以使用易于记忆的 Facade Settings 访问设置。

设置新设置

您可以使用“set”方法设置新的设置,该方法接受一个包含一个或多个键值对的关联数组。首先会检查该设置键是否是“可填充的”,这是 config/settings.php 文件中的一个配置选项。

如果该键存在于配置中,它将更新键为传入的新值。如果键不存在于可填充的配置中,将忽略更改。因此,如果是全新安装,不要期望以下操作生效

Settings::set(['firm_name'=>'new']);

它将不会设置新的设置,直到您在配置中设置了可填充字段,或者您选择了强制设置。如果您希望强制设置新的设置,应在调用 set() 方法之前使用 force() 方法

Settings::force()->set(['firm_name'=>'new']);

从版本 3.0.4 开始,此包的全局强制设置覆盖已从配置文件中删除。相反,您可以使用通配符来设置可填充属性,如下所示

'fillable' => ['*']

这更符合标准 Laravel 语法(例如,对于模型)。

获取所有设置

如果没有传递参数给“get”方法,它将返回所有设置的数组

Settings::get();

您可以使用如以下所述的 hidden 配置选项选择性地隐藏特定设置。

获取单个设置

通过传递单个设置键可以返回单个设置

Settings::get('firm_name');

获取特定设置

您也可以通过传递设置键的数组来返回指定的设置列表

Settings::get(['firm_name','contact_types']);

检查设置是否已设置

有时您无法确定设置是否已设置(例如,布尔设置,如果设置不存在或设置为 false,则返回 false)。

Settings::has(['dark_theme']);

加密

您可以在 config/settings.php 文件中定义应在其中自动加密的键。为此,将键添加如下所示

'encrypt' => [
        'twitter_client_id',
        'twitter_client_secret',
    ],

多租户

本软件包可在多租户环境中使用。设置设置、获取所有设置和检查是否设置了设置has方法都读取一个内部'tenant'属性,该属性可以使用tenant()方法设置。您可以通过首先调用tenant()方法来设置'tenant'属性,如下所示

Settings::tenant('tenant_name')->set(['firm_name'=>'foo bar']);

// returns true (i.e. successfully set `firm name`)
Settings::tenant('tenant_name')->get('firm_name');

// returns 'foo bar'
Settings::tenant('tenant_name')->has('firm_name');

// returns true

传递的'tenant'属性可以是任何字母数字字符串。'tenant'属性也可以为空,例如,将设置保存到所谓的“中央”租户。注意:'tenant'属性不是严格类型,将作为字符串传递给数据库查询。

类型转换

您可以使用settings.php配置中的cast选项将设置转换为原生PHP类型。以下是将数组转换为JSON然后再转换回原生PHP数组的示例

// settings.php

'cast' => [
  'array_of_values' => 'json' 
]

这允许您执行以下操作

Settings::set(['array_of_values' => ['one', 'two', 'three']]);

return Settings::get('array_of_values');

// returns a PHP array: ['one', 'two', 'three']

禁用缓存

根据您的使用情况,您可能希望禁用缓存(默认启用)。通过修改config/settings.php文件来禁用缓存,如下所示

'cache' => false

隐藏设置

您可能希望隐藏特定的设置(如API密钥或其他敏感用户数据),以防止意外泄露。您可以在config/settings.php文件中设置这些设置。为此,添加如下键

'hidden' => [
        'twitter_client_secret',
        'super_secret_password',
    ],

一旦设置了这些,就必须使用get()方法明确请求它们。换句话说,这就像Laravel Eloquent模型上的$hidden属性。

除了隐藏特定的设置外,您还可以选择隐藏所有设置(除非明确请求,当然)。为此,您可以使用通配符

'hidden' => ['*'],

自定义表名

在某些情况下,可能需要自定义存储设置的表的名称。默认情况下,本软件包附带迁移创建一个名为'settings'的表。如果由于某种原因需要更改默认表,您可以在config/settings.php文件中设置'table'选项,如下所示

'table' => 'user_options_table',

此配置选项不包括在基本配置文件中,因为这是一个不太常见的情况;但即便如此,当出现这种情况时,它也是一个很好的便利设施。

最后

测试

您可以使用composer test命令运行测试。

贡献

如果您想贡献,请随意创建一个分支并提交一个pull请求。

错误报告

如果在GitHub上发现某些东西出了问题,请提出一个问题。