liteas98/l4-settings

Laravel中的持久化设置。

v1.1.1 2022-02-11 13:01 UTC

README

Build Status Latest Stable Version License

Laravel的全局持久化设置。

尽管包名为l4-settings,但此包应与Laravel 4、5、6、7和8兼容(尽管某些版本没有自动测试)。

常见问题

安装 - Laravel >= 5.5

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

安装 - Laravel < 5.5

  1. composer require anlutro/l4-settings
  2. anlutro\LaravelSettings\ServiceProvider添加到config/app.php中服务提供者数组。
  3. 运行php artisan config:publish anlutro/l4-settings(Laravel 4.x)或php artisan vendor:publish(Laravel 5.x)。配置文件将让您控制使用哪种存储引擎以及一些特定的存储设置。
  4. 可选:将'Setting' => 'anlutro\LaravelSettings\Facade'添加到config/app.php中的别名数组。

使用

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

<?php
Setting::set('foo', 'bar');
Setting::get('foo', 'default value');
Setting::get('nested.element');
Setting::forget('foo');
$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();

自动保存

在Laravel 4.x中,库确保在应用程序关闭时自动保存任何更改。

在Laravel 5.x中,如果您将中间件anlutro\LaravelSettings\SaveMiddleware添加到app\Http\Kernel.php中的middleware列表,设置将在所有HTTP请求结束时自动保存,但您仍然需要在控制台命令、队列工作程序等中显式调用Setting::save()

存储缓存

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

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

读取将从存储开始,然后是缓存,这可以减少对存储的负载。

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

JSON存储

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

数据库存储

使用迁移文件

如果您使用数据库存储,则需要运行php artisan migrate --package=anlutro/l4-settings(Laravel 4.x)或php artisan vendor:publish --provider="anlutro\LaravelSettings\ServiceProvider" --tag="migrations" && php artisan migrate(Laravel 5.x)来生成表。

示例

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

<?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 anlutro\LaravelSettings\SettingStore {
	// ...
}
Setting::extend('mystore', function($app) {
	return $app->make('MyStore');
});
?>

联系

如果您有任何问题或建议,请在GitHub上提交一个问题。

许可证

本仓库的内容在MIT许可证下发布。