xgrz / laravel-app-settings
laravel中应用设置的简单处理
Requires
- php: ^8.1
README
用于处理应用设置的简单易用且性能高的laravel模块。每次应用重新加载时优化1次缓存/数据库。
该包处理配置文件中的默认设置,因此您可以简单地复制配置文件到第二个项目,其中已设置所有设置。
1. 安装
使用composer安装包
composer require xgrz/laravel-app-settings
发布配置
php artisan app-settings:publish
发布后,您将在应用/config
目录中找到2个配置文件。
laravel-app-settings-config
包含包配置laravel-app-settings-definitions
包含设置定义
设置数据库表名(在下一步之前)
请随意更新/config/laravel-app-settings-config.php
中的database_table
-> database_table
,以防与您的数据库模式冲突。默认表名设置为settings
。
运行迁移
php artisan migrate
配置和同步设置
使用终端运行同步命令,编辑您的/config/laravel-app-settings-definitions
文件以设置自己的设置。在所有更改完成后,您必须运行同步命令。
php artisan app-settings:sync
2. 在代码中使用设置
在此示例中,假设设置键application.key
已存在。
获取设置值的首选方式是使用全局辅助函数
setting('application.name');
函数setting($param);
仅接受设置键作为参数。
获取值的第二种方式是使用设置外观
use xGrz\LaravelAppSettings\Support\Facades\Settings;
Settings::get('application.name`);
此外观方法仅接受设置键作为参数。
缺失键的行为
如果键不存在
xGrz\LaravelAppSettings\Exceptions\SettingsKeyNotFoundException
将被抛出。
3. 修改设置
如果只想修改设置值,最简单的方法是使用外观
use xGrz\LaravelAppSettings\Support\Facades\Settings;
Settings::set('application.name`, 'SOME NEW VALUE');
在管理设置的情况下,您可能还想更改描述。
use xGrz\LaravelAppSettings\Support\Facades\Settings;
Settings::update('application.name`, [
'value' => 'SOME NEW VALUE',
'description' => 'New setting key description'
]);
默认情况下,您可以使用我们的FormRequest在控制器中验证传入的更新数据。验证规则是动态的,取决于设置类型。
在控制器中更新方法
use Illuminate\Http\Response;
use Illuminate\Database\Eloquent\ModelNotFoundException;
use xGrz\LaravelAppSettings\Http\Requests\UpdateSettingRequest;
use xGrz\LaravelAppSettings\Exceptions\SettingsKeyNotFoundException;
use xGrz\LaravelAppSettings\Exceptions\SettingValueValidationException;
use xGrz\LaravelAppSettings\Models\Setting;
public function update(UpdateSettingRequest $request, Setting $setting)
{
try {
$updated = Settings::update($setting, $request->validated());
} catch (SettingsKeyNotFoundException $e) {
throw new ModelNotFoundException($e->getMessage());
} catch (SettingValueValidationException $e) {
abort(Response::HTTP_NOT_ACCEPTABLE, $e->getMessage());
}
return ...
}
4. 添加/删除新设置
4.1 添加设置
转到/config/laravel-app-settings-definitions.php
。在此配置文件中,您将看到定义的组及其设置的树。您被允许添加新的组和键名。您可以在任何时间从定义文件中删除键名/组。
在定义文件中进行更改后,您必须始终使用Artisan命令进行同步
php artisan app-settings:sync
定义新的设置组 打开定义文件并添加新的数组项,例如,假设我们想要添加一个名为seo
的新组
return [
// some existsing settings
'seo' => [
// key-names for seo group.
]
]
seo
组为空,因此让我们添加一些键
return [
// some existsing settings
'seo' => [
'google_gtm' => [
// definition of seo.google_gtm key
],
'adwords_id' => [
// definition of seo.adwords_id
]
]
]
每个键都应该使用value
、description
和type
进行定义。
type
属性期望提供SettingValueType(枚举xGrz\LaravelAppSettings\Enums\SettingValueType
)。您可以从以下选项中选择
- SettingValueType::Text(字符串),
- SettingValueType::Number(整数,浮点数),
- SettingValueType::Selectable(数组),
- SettingValueType::BooleanType(布尔值),
value
属性是键的初始值,并且对于定义的设置值类型必须是有效的。
description
可选属性。在您使用用户界面管理设置时很有用。
您的配置应如下所示
return [
// some existsing settings
'seo' => [
'google_gtm' => [
'value' => '',
'type' => SettingValueType::Text,
'description' => 'Google Tag Manager'
],
'adwords_id' => [
'value' => 123093093,
'type' => SettingValueType::Number,
'description' => 'Google adwords id'
]
]
]
记住在编辑定义文件后同步设置
php artisan app-settings:sync
4.2. 删除设置
从定义文件中删除键名或整个组,然后运行同步
php artisan app-settings:sync
5. 数据库刷新(seeder)后的设置同步。
每次刷新数据库时,您都必须运行同步命令(php artisan app-settings:sync
)以恢复初始设置。通常情况下,您希望在清空数据库后应用程序能够立即使用,因此可以通过添加 Seeder 来自动化此过程。
<?php
namespace Database\Seeders;
use Illuminate\Database\Seeder;
use xGrz\LaravelAppSettings\Database\Seeders\LaravelAppSettingsSeeder;
class DatabaseSeeder extends Seeder
{
public function run(): void
{
$this->call(LaravelAppSettingsSeeder::class);
// ... [other seeders]
}
}