gokure/hyperf-settings

Hyperf 的持久化配置包

v1.0.0 2021-07-05 08:03 UTC

This package is auto-updated.

Last update: 2024-09-06 09:22:48 UTC


README

Build Status Latest Stable Version Total Downloads License

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

安装

  1. 在您的 composer.json 中要求 gokure/hypref-settings 包并更新您的依赖项
composer require gokure/hypref-settings
  1. 发布配置和迁移文件
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