ruangdeveloper / laravel-settings
在数据库中管理模型或应用设置
Requires
- laravel/framework: ^11.0
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