jano-may-ball/settings

Laravel 的持久化设置;anlutro/l4-settings 的分支

v1.1.1 2019-01-13 12:10 UTC

This package is not auto-updated.

Last update: 2024-09-23 06:29:40 UTC


README

Build Status Latest Stable Version License

为 Laravel 提供持久、应用程序范围内的设置。是 anlutro/laravel-settings 的分支。现在支持使用 .hjson 文件。

尽管包名如此,此包与 Laravel 5.x 兼容!

常见问题

安装 - 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()

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 打开一个问题。

许可

本存储库的内容遵循GNU通用公共许可证v3.0发布。