akaunting/laravel-setting

Laravel 持久化配置包

1.2.9 2023-11-02 08:32 UTC

README

Downloads StyleCI License

此包允许您以更持久的方式保存设置。您可以使用数据库和/或 JSON 文件来保存您的设置。您还可以覆盖 Laravel 配置。

  • 驱动支持
  • 辅助函数
  • Blade 指令
  • 覆盖配置值
  • 加密
  • 自定义文件、表和列
  • 自动保存
  • 额外列
  • 缓存支持

入门指南

1. 安装

运行以下命令

composer require akaunting/laravel-setting

2. 注册(针对 Laravel < 5.5)

config/app.php 中注册服务提供者

Akaunting\Setting\Provider::class,

如果您想使用外观,请添加别名。

'Setting' => Akaunting\Setting\Facade::class,

3. 发布

发布配置文件。

php artisan vendor:publish --tag=setting

4. 数据库

为数据库驱动创建表

php artisan migrate

5. 配置

您可以通过 config/setting.php 文件更改应用程序的选项

用法

您可以使用辅助方法 setting('foo') 或外观 Setting::get('foo')

外观

Setting::get('foo', 'default');
Setting::get('nested.element');
Setting::set('foo', 'bar');
Setting::forget('foo');
$settings = Setting::all();

辅助方法

setting('foo', 'default');
setting('nested.element');
setting(['foo' => 'bar']);
setting()->forget('foo');
$settings = setting()->all();

您可以通过调用 save() 方法来保存更改。

自动保存

如果您在配置文件中启用了 auto_save 选项,则在应用程序关闭时,如果有任何更改,设置将自动保存。

Blade 指令

您可以使用辅助方法或 Blade 指令(如 @setting('foo'))在 blade 模板中直接获取设置。

覆盖配置值

您可以通过将它们添加到 config/setting.php 中的 override 选项来轻松覆盖默认配置值,从而消除修改默认配置文件的需要,并在生产过程中允许您更改这些值。例如

'override' => [
    "app.name" => "app_name",
    "app.env" => "app_env",
    "mail.driver" => "app_mail_driver",
    "mail.host" => "app_mail_host",
],

左边的值对应于相应的配置值(例如:config('app.name')),而右边的值是设置表/json 文件中的 key 名称。

加密

如果您想加密给定键的值,可以将键传递到 config/setting.php 中的 encrypted_keys 选项,其余的将由 Laravel 内置加密功能自动处理。例如

'encrypted_keys' => [
    "payment.key",
],

JSON 存储

您可以使用 setting()->setPath($path) 在运行时修改使用的路径。

数据库存储

如果您想将数据库用作设置存储,则应运行 php artisan migrate。您可以从迁移目录中的 create_settings_table 文件中修改表字段。

额外列

如果您想在同一数据库中为多个用户/客户存储设置,可以通过指定额外列来实现

setting()->setExtraColumns(['user_id' => Auth::user()->id]);

现在,当检索设置时,将在数据库查询中添加 user_id = x,并且当保存新设置时,将填充 user_id

如果您需要对要查询的数据有更精确的控制,可以使用 setConstraint 方法,它接受一个闭包,该闭包带有两个参数

  • $query 是查询构建器实例
  • $insert 是一个布尔值,告诉您查询是插入操作还是其他操作。如果是插入操作,通常不需要对 $query 进行任何操作。
setting()->setConstraint(function($query, $insert) {
	if ($insert) return;
	$query->where(/* ... */);
});

自定义驱动

此包在底层使用 Laravel 的 Manager 类,因此很容易添加自己的存储驱动。您需要做的就是扩展抽象 Driver 类,实现抽象方法,并调用 setting()->extend

class MyDriver extends Akaunting\Setting\Contracts\Driver
{
	// ...
}

app('setting.manager')->extend('mydriver', function($app) {
	return $app->make('MyDriver');
});

变更日志

请参阅发布版本获取更多关于最近更改的信息。

贡献

欢迎提交拉取请求。您必须遵循PSR编码标准。

安全

如果您发现任何安全相关的问题,请通过电子邮件security@akaunting.com联系,而不是使用问题追踪器。

鸣谢

许可协议

MIT许可协议(MIT)。请参阅LICENSE获取更多信息。