hackeresq / laravel-settings
为 Laravel 8+ 提供的超简单键值设置
Requires
- php: >=8.0
- doctrine/dbal: ^3.0
- laravel/framework: ^8.0|^9.0|^10.0
Requires (Dev)
- orchestra/testbench: ^6.11
- phpunit/phpunit: ^7.0|^8.0|^9.0
This package is auto-updated.
Last update: 2024-09-09 01:39:53 UTC
README
为 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上发现某些东西出了问题,请提出一个问题。