flamix/settings

Laravel 的持久化设置。源自 Andreas Lutro 的应用。

v2.0 2023-06-02 14:50 UTC

README

为 Laravel 提供持久化、应用程序级设置。

尽管包名为此,此包应与 Laravel 8+ 兼容(尽管某些版本没有自动测试)。

安装

  1. composer require flamix/settings
  2. 通过运行 php artisan vendor:publish --provider="Flamix\Settings\ServiceProvider" --tag="config" 发布配置文件。配置文件将让您控制使用哪种存储引擎以及一些特定的存储设置。

用法

您可以通过其外观或通过类型提示抽象类 Flamix\Settings\SettingStore 来注入设置存储器。

<?php
Setting::set('foo', 'bar');
Setting::get('foo', 'default value');
Setting::get('nested.element');
Setting::forget('foo'); // Do not forget save() after this!!
$settings = Setting::all();
?>

显式调用 Setting::save() 以保存更改。

您还可以使用 setting() 助手函数

// Get the store instance
setting();

// Get values
setting('foo');
setting('foo.bar');
setting('foo', 'default value');
setting()->get('foo');

// Set values
setting(['foo' => 'bar']);
setting(['foo.bar' => 'baz']);
setting()->set('foo', 'bar');

// Method chaining
setting(['foo' => 'bar'])->save();

存储缓存

在从存储中读取时,您可以选择启用缓存。

您还可以配置在写入时刷新缓存并配置生存时间。

读取将来自存储,然后来自缓存,这可以减少存储的负载。

// Cache usage configurations.
'enableCache' => false,
'forgetCacheByWrite' => true,
'cacheTtl' => 15,

JSON 存储

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

数据库存储

使用迁移文件

如果您使用数据库存储,则需要运行 php artisan vendor:publish --provider="Flamix\Settings\ServiceProvider" --tag="migrations" && php artisan migrate

示例

例如,如果您想将多个用户/客户的设置存储在同一数据库中,您可以指定额外的列

<?php
Setting::setExtraColumns(array(
	'user_id' => Auth::user()->id
));
?>

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

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

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

自定义存储

此包在底层使用 Laravel 的 Manager 类,因此如果您想要以其他方式存储,可以轻松地添加自定义会话存储驱动程序。您需要做的就是扩展抽象类 SettingStore,实现抽象方法,并调用 Setting::extend

<?php
class MyStore extends Flamix\Settings\SettingStore {
	// ...
}
Setting::extend('mystore', function($app) {
	return $app->make('MyStore');
});
?>