gokure / hyperf-settings
Hyperf 的持久化配置包
v1.0.0
2021-07-05 08:03 UTC
Requires
- php: >= 7.2
- ext-swoole: >= 4.4
- hyperf/config: ^1.0|^2.0
- hyperf/database: ^1.0|^2.0
- hyperf/db-connection: ^1.0|^2.0
- hyperf/utils: ^1.0|^2.0
Requires (Dev)
- hyperf/di: ^1.0|^2.0
- hyperf/testing: ^1.0|^2.0
- mockery/mockery: ^1.0
- phpunit/phpunit: ^7.0.0
- roave/security-advisories: dev-master
- swoole/ide-helper: ^4.5
Suggests
- hyperf/http-server: Reqiured to use settings middleware.
README
此包允许您以更持久的方式保存设置。您可以使用数据库和/或 json 文件来保存您的设置。
安装
- 在您的
composer.json
中要求gokure/hypref-settings
包并更新您的依赖项
composer require gokure/hypref-settings
- 发布配置和迁移文件
php bin/hyperf.php vendor:publish gokure/hypref-settings
使用
$store = $container->get(\Gokure\Settings\SettingManager::class)->getDriver(); $store->set('foo', 'bar'); $store->get('foo', 'default value'); $store->get('nested.element'); $store->forget('foo'); $stores = $store->all();
显式调用 $store->save()
以保存所做的更改。
您也可以使用 setting()
助手
// Get the `default` 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();
配置
您可以修改 config/autoload/settings.php
return [ 'default' => [ /** * Default Store Driver * * This option controls the default setting connection that gets used while * using this setting library. * * Supported: `FileSystemStore::class` and `DatabaseStore::class` */ 'driver' => Gokure\Settings\FileSystemStore::class, /** * FileSystem Store * * This option used when the driver is set `FileSystemStore::class`, and * make sure the path is writable. */ 'path' => BASE_PATH . '/runtime/settings.json', /** * Database Store * * This option used when the driver is set DatabaseStore::class. */ 'database' => [ // If set to null, the default connection will be used. 'connection' => null, // Table name. 'table' => 'settings', // Column names in database store. 'key_column' => 'key', 'value_column' => 'value', ], ], ];
自动保存
如果您将中间件 Gokure\Settings\SaveMiddleware
添加到 config/autoload/middlewares.php
中的 middlewares
列表中,设置将在所有 HTTP 请求结束时自动保存,但您仍然需要在命令、队列工作者等地方显式调用 $store->save()
。
文件系统存储
您可以使用 $store->setPath($path)
修改在运行时使用的路径。
数据库存储
如果您想使用数据库作为设置存储,则应运行 php bin/hyperf.php migrate
。您可以从迁移目录中的 create_settings_table
文件中修改表字段。
额外列
如果您想在同一数据库中为多个用户/客户端存储设置,可以指定额外的列
$store->setExtraColumns(['user_id' => 1]);
其中 user_id = 1
将现在在检索设置时添加到数据库查询中,当保存新设置时,将填充 user_id
。
如果您需要对要查询的数据有更精细的控制,可以使用 setConstraint
方法,该方法接受一个闭包作为参数,该闭包有两个参数
$query
是查询构建器实例$insert
是一个布尔值,告诉您查询是否为插入。如果是插入,通常不需要对$query
做任何操作。
$store->setConstraint(function($query, $insert) { if (!$insert) { $query->where(/* ... */); } });
许可
在 MIT 许可证下发布,请参阅 LICENSE。