ruangdeveloper/laravel-settings

在数据库中管理模型或应用设置

v2.0.0 2024-03-14 21:13 UTC

This package is auto-updated.

Last update: 2024-09-14 22:14:18 UTC


README

介绍 "Laravel Settings" - 一个强大且灵活的 Laravel 扩展包,旨在简化全局和模型级应用设置的管理。使用此扩展包,开发者可以轻松地在数据库中存储、检索和自定义设置,增强基于 Laravel 的项目的配置和灵活性。

无论您需要管理网站全局配置、用户偏好还是任何其他可自定义设置,"Laravel Settings" 都提供了一个优雅的解决方案,以简化此过程。它提供了一种干净直观的 API,确保您可以快速开始,而无需任何陡峭的学习曲线。

关键特性

  • 全局和模型特定设置:"Laravel Settings" 允许您定义全局设置,这些设置适用于整个应用程序,以及模型特定设置,这些设置与特定的 Eloquent 模型相关联。

  • 简单配置:您可以在配置文件中定义设置,这使得设置和管理应用程序的设置变得非常容易。

  • 可定制:该扩展包提供了灵活性,可以创建自定义设置类型,确保您可以处理各种数据类型、验证规则和显示选项。

  • Eloquent 集成:"Laravel Settings" 与 Laravel 的 Eloquent ORM 无缝集成,使您能够将设置链接到特定的数据库记录。

要求

  • Laravel ^10.0

安装

要开始使用 "Laravel Settings",请按照以下简单的安装步骤进行

使用 Composer 安装包

composer require ruangdeveloper/laravel-settings

发布配置文件

php artisan vendor:publish --provider="RuangDeveloper\LaravelSettings\LaravelSettingsServiceProvider" --tag="config"

根据应用程序的要求在 config/laravel-settings.php 中配置设置。

发布迁移文件

php artisan vendor:publish --provider="RuangDeveloper\LaravelSettings\LaravelSettingsServiceProvider" --tag="migrations"

用法

让我们快速看看如何使用 "Laravel Settings" 来管理应用程序的全局设置。

设置全局设置

use RuangDeveloper\LaravelSettings\Facades\Settings;

// setting the global site title
Settings::set('site_title', 'Your Awesome Website');

获取全局设置

use RuangDeveloper\LaravelSettings\Facades\Settings;

// retrieve the global site title
$siteTItle = Settings::get('site_title');

// you may want to add a default fallback value if the setting
// with provided key doesn't exists in the database
$siteTitle = Settings::get('site_title', 'Your Default Awesome Website');

删除全局设置

现在,如果您想删除设置

use RuangDeveloper\LaravelSettings\Facades\Settings;

Settings::delete('site_title');

忘记全局设置(已弃用,请使用删除代替)

现在,如果您想删除设置

use RuangDeveloper\LaravelSettings\Facades\Settings;

Settings::forget('site_title');

模型特定设置

此扩展包允许您将设置链接到特定模型。例如,您可能想要存储用户的偏好。

模型配置 在将设置链接到特定模型之前,您需要配置您的模型以使用 HasSettings 特性。

use Illuminate\Database\Eloquent\Model;
use RuangDeveloper\LaravelSettings\Traits\HasSettings;

class User extends Model
{
    use HasSettings; // use the HasSettings trait

    protected $guarded = [];
}

现在,您可以使用设置来管理用户。

设置设置

$user = App\Models\User::find(1);
$user->setSetting('subscribe_newsletter', true);

获取设置

$user = App\Models\User::find(1);
$isSubscribed = $user->getSetting('subscribe_newsletter');

// you may want to add a default fallback value if the setting
// with provided key doesn't exists in the database
$isSubscribed = $user->getSetting('subscribe_newsletter', false);
//

删除设置

$user = App\Models\User::find(1);
$user->deleteSetting('subscribe_newsletter');

忘记设置(已弃用,请使用删除代替)

$user = App\Models\User::find(1);
$user->forgetSetting('subscribe_newsletter');

默认设置

您可能希望为全局或模型特定设置添加默认设置值。您可以在位于 configs/laravel-settings.php 的配置文件中添加这些设置值。

注意:如果您找不到配置文件,您需要首先发布配置。

默认全局设置

return [
    // others config

    'defaults' => [
        'site_title' => 'Your Awesome Site',
    ],
];

现在,如果没有在数据库中存储设置,您将始终获取默认网站标题设置。

use RuangDeveloper\LaravelSettings\Facades\Settings;


$siteTItle = Settings::get('site_title');

echo $siteTitle; // Your Awesome Site

默认模型特定设置

return [
    // others config

    'model_defaults' => [
        'App\Models\User' => [
            'subscribe_newsletter' => false
        ],
    ],
];

现在,当您尝试从没有订阅新闻通讯设置的用户的设置中检索它时,您将始终获取默认订阅新闻通讯设置。

$user = App\Models\User::find(1);
$isSubscribed = $user->getSetting('subscribe_newsletter');

echo $isSubscribed // false

缓存

正如您所知,这个包使用数据库来存储设置值。每次您检索设置值时,意味着您正在对数据库进行查询。对于小型应用来说,这没问题,但当用于大型应用时可能会产生重大影响。为了解决这个问题,您可以通过启用缓存来存储设置值,这样在您首次尝试检索设置值时,查询只会执行一次。

要启用缓存,您可以进入文件 config/laravel-settings.php 并将 with_cache 的值更改为 true。您也可以在那里设置前缀和有效期。

<?php

return [
    // Change this to true if you want to use the cache feature.
    'with_cache' => true,

    // The cache key prefix that will be used to store the settings in the cache.
    'cache_prefix' => 'laravel-settings',

    // Cache lifetime in seconds.
    'cache_lifetime' => 60 * 60 * 24 * 7, // 7 days

    // other config
];

自定义

使用您自己的模型

虽然这个包几乎覆盖了您管理设置所需的所有内容,但您可能想使用自己的模型。为此,您可以扩展此包中的 Setting 模型。

use RuangDeveloper\LaravelSettings\Models\Setting;

class CustomSetting extends Setting
{
    //
}

之后,您需要通知这个包使用您刚刚创建的模型。请在 configs/laravel-settings.php 中更新。

return [
    // others config

    'model' => App\Models\CustomSetting::class,
];

贡献

https://github.com/ruangdeveloper/laravel-settings/blob/main/CONTRIBUTING.md

许可证

https://github.com/ruangdeveloper/laravel-settings/blob/main/LICENSE.md