padosoft/laravel-settings

Laravel 中具有缓存的持久化设置。

6.3.0 2024-07-05 12:01 UTC

README

License

CircleCI

数据库持久化,内存中快速,Laravel 全局设置。

由于从数据库检索时设置会自动缓存,因此性能不会因设置而失效。待完成文档。

要求

PHP >= 7.1.3
Laravel 5.8.*|6.*|7.*|8.*|9.*|10.* (For Laravel framework 5.6.* or 5.7.* please use v1.*)

安装

  1. composer require padosoft/laravel-settings
  2. 运行 php artisan vendor:publish --provider="Padosoft\Laravel\Settings\ServiceProvider" 发布配置和迁移文件。
  3. 运行 php artisan migrate

在运行迁移之前,请确保在您的 AppServiceProviders.php 中有以下行

use Illuminate\Support\Facades\Schema;

public function boot()
{
    Schema::defaultStringLength(191);
}

安装 - Laravel < 5.5

  1. Padosoft\Laravel\Settings\ServiceProvider 添加到 config/app.php 中的提供者数组中。
  2. 'SettingsManager' => 'Padosoft\Laravel\Settings\Facade' 添加到 config/app.php 中的别名数组中。

用法

您可以通过其外观或通过类型提示抽象类 anlutro\LaravelSettings\SettingStore 注入来访问设置存储。

<?php
SettingsManager::get('foo', 'default value');
SettingsManager::get('foo', 'default value',false,true); //Get cast value without validation
SettingsManager::get('foo', 'default value',false,false); //Get raw value
SettingsManager::get('foo', 'default value',true,false); //Get validated value without cast
SettingsManager::set('set', 'value');//valid for current session
SettingsManager::set('set', 'value','validationRule');//with validation rule valid for current session
SettingsManager::store();//persist settings value on db
SettingsManager::setAndStore('set', 'value','validationRule');//persisted on database
?>

显式调用 Setting::store() 以保存所做的更改。

您还可以使用 setting() 助手函数

// Get the store instance
settings();

// Get values
settings('foo');
settings('foo', 'default value',true,false);//Get cast value without validation
settingsRaw('foo', 'default value');//Get raw value
settingsAsString('foo', 'default value');//Get value as a String Validated
settings('foo', 'default value',false,true);//Get raw value
settings('foo', 'default value',false,false);//Get validated value without cast
settings('foo', 'default value',);
settings()->get('foo');

在其他包中使用

如果您想在其他包中使用设置管理器,您必须提供迁移以填充设置表。例如

<?php

use Illuminate\Support\Facades\Schema;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Database\Migrations\Migration;
use Illuminate\Support\Facades\DB;
class PopulateSettings extends Migration
{
    /**
     * Run the migrations.
     *
     * @return void
     */
    public function up()
    {
        if (config('padosoft-settings.enabled',false)) {
            DB::table('settings')->insert([
                //LOGIN
                ['key'=>'login.remember_me', 'value'=>'1','descr'=>'Enable/Disable remeber me feature','config_override'=>'padosoft-users.login.remember-me','validation_rules'=>'boolean','editable'=>1,'load_on_startup'=>0],
                ['key'=>'login.login_reset_token_lifetime', 'value'=>'30','descr'=>'Number of minutes reset token lasts','config_override'=>'auth.expire','validation_rules'=>'numeric','editable'=>1,'load_on_startup'=>0],                
            ]);
        }

    }

    /**
     * Reverse the migrations.
     *
     * @return void
     */
    public function down()
    {

    }
}

请确保将 config_override 列填充为要覆盖的配置键值,以使设置生效

/*
      |--------------------------------------------------------------------------
      | Larvel Settings Manager
      |--------------------------------------------------------------------------
      |
      | This option controls if the settings manager is enabled.
      | This option should not be is overwritten here but using settings db table
      |
      |
      |
      |
      */

    'enabled' => true,
    'encrypted_keys' => [],
    'cast' => [
        //Example new cast and validation
        //class = class for cast
        //method = method for cast
        //validate = rule for validation
        'boolean' => ['class' => \Padosoft\Laravel\Settings\CastSettings::class, 'method' => 'boolean', 'validate' => 'boolean'],
        'listPipe' => ['class' => \App\Casts\ListPipeCast::class, 'validate' => 'regex:/(^[0-9|]+$)|(^.{0}$)/'],
        'booleanString' => ['class' => \App\Casts\BooleanString::class,'validate' => 'regex:/^(true|false)/'],
        'booleanInt' => ['class' => \App\Casts\BooleanInt::class,'validate' => 'regex:/^(0|1)/'],
        ],

事件监听

每次创建、更新或删除模型时,都会分发一个事件。您可以使用 Laravel 的简单监听器来监听这些事件

    public function subscribe(Dispatcher $events): void
    {
        $events->listen(\Padosoft\Laravel\Settings\Events\SettingCreated::class, [SettingsEventSubscriber::class, 'handleSettingCreated']);
        $events->listen(\Padosoft\Laravel\Settings\Events\SettingUpdated::class, [SettingsEventSubscriber::class, 'handleSettingUpdated']);
        $events->listen(\Padosoft\Laravel\Settings\Events\SettingDeleted::class, [SettingsEventSubscriber::class, 'handleSettingDeleted']);
    }

联系方式

如果您有任何问题或建议,请在 GitHub 上提交问题。

许可证

此存储库的内容在 MIT 许可证 下发布。