justijndepover/laravel-settings

在您的 Laravel 应用程序中存储设置

0.12.0 2024-02-20 09:52 UTC

This package is auto-updated.

Last update: 2024-09-20 12:23:07 UTC


README

Latest Version on Packagist Software License Total Downloads

在您的 Laravel 应用程序中存储设置。

安装

您可以使用 composer 安装此包

composer require justijndepover/laravel-settings

安装后,您可以选择发布您的配置文件

php artisan vendor:publish --tag="laravel-settings-config"

配置

这是配置文件

return [

    /**
     * This setting determines what driver you want to use
     * You can overwrite this driver with your own custom one.
     */
    'driver' => \Justijndepover\Settings\Drivers\Database::class,

    /**
     * Automatically store the app locale
     * If this settings is enabled, the app locale will always be stored in database
     * omitting the need to scope your result set:
     *
     * settings()->forLocale(app()->getLocale())->get('name') becomes: settings()->get('name')
     */
    'auto_store_locale' => false,

    /**
     * Duration the system should cache the fetched database results
     * possible values: 'forever', 'current_request', (int) $seconds
    */
    'cache_time' => 'forever',

];

如果您选择了默认的数据库驱动程序,您应该发布迁移文件并执行它

php artisan vendor:publish --tag="laravel-settings-migration"
php artisan migrate

用法

您有三种不同方式与设置交互。

使用全局辅助函数

settings()->get('site_name')

通过依赖注入注入设置类

use Justijndepover\Settings\Settings;

class HomeController extends Controller
{
    public function __invoke(Settings $settings)
    {
        $settings->get('site_name');
    }
}

使用全局外观

Settings::get('site_name');

所有功能都可通过每种方法访问。

示例

// get some value
settings('site_name');

// Is the equivalent of
settings()->get('site_name');

// return a default if no value exists
settings()->get('site_name', 'default');

// store a single value
settings()->set('site_name', 'my-personal-blog');

// store multiple values at once
settings()->set([
    'site_name' => 'my-personal-blog',
    'site_domain' => 'my-personal-blog.com',
]);

// check if a setting exists
settings()->has('site_name');

// delete all settings (both work)
settings()->flush();
settings()->delete();

// delete a single setting (both work)
settings()->forget('site_name');
settings()->delete('site_name');

用户设置

除了默认设置外,您还可以使用此包来存储用户设置。将 HasSettings 特性添加到您的 User 模型中

use Justijndepover\Settings\Concerns\HasSettings; // add this line

class User
{
    use HasSettings; // add this line
}

安装特性后,您将在用户上获得一个 settings 方法

// access user settings throught the model
$user = User::find(1);
$user->settings()->get('preferred_language');

// access user settings through the settings class
settings()->forUser(1)->get('preferred_language');

// all other methods are available as well

语言特定设置

您可以将设置存储/访问到特定区域。

settings()->forLocale('en')->set('website', 'my-personal-blog.com/en');

关于此工作方式的说明

缓存

每当执行读取操作时,该包将检查值是否存在于缓存中。如果未找到,则会执行数据库读取操作(获取所有值)并将其存储在缓存中以供其他调用消耗。

这意味着执行多次读取(即使是多个键)也只会执行一次数据库调用。

如果执行了写入操作,则会清除缓存。这意味着在查询新设置时将再次从数据库中读取。

重要 这意味着该包使用缓存作为其主要来源,并在其他情况下回退到数据库(这在大多数情况下都是好的)。如果您直接更改数据库值,则应手动清除缓存。

当与无服务器应用程序(例如 AWS Lambda + Bref 或 Laravel Vapor)一起工作时,如果您不共享 Lambda 函数之间的缓存,这可能会导致问题。在这种情况下,您可以将 Laravel 缓存设置为类似 Redis 的东西,或者禁用此包中的缓存功能。为此,发布配置文件并将 cache_time 设置为 0

清除缓存

您还可以以编程方式清除缓存

settings()->clearCache();
// or
Settings::clearCache();

用户和区域设置

默认驱动程序始终在数据库中存储 localeuser_id 字段(默认为 null)。从数据库获取数据时也会查询这些参数。

要查询不同于 null 的内容,您应该在 setting 和最终方法之间链式调用 forUserforLocale

settings()->forUser(1)->get('name');
settings()->forLocale('nl')->get('name');
settings()->forUser(1)->forLocale('nl')->get('name');

安全性

如果您发现任何安全问题,请提出问题或直接通过 justijndepover@gmail.com 联系我。

贡献

如果您想对此包进行任何更改或改进,请随时创建拉取请求。

许可

MIT 许可证 (MIT)。有关更多信息,请参阅许可文件