未定义的索引:路径,在 laravel 5.8 中添加新的自定义服务提供商时

Undefined index: path, when adding new custom service provider in laravel 5.8

我想添加新的自定义服务提供商来设置 session_lifetime。它的价值,我是从数据库中得到的。为此,我创建了服务提供商。但是在服务商注册之后。我得到了这样的错误:Undefined index: path.

这是我的新服务提供商代码:

<?php

namespace App\Providers;

use Illuminate\Support\ServiceProvider;
use Config;
use Illuminate\Support\Facades\DB;

class ParameterSettingServiceProvider extends ServiceProvider
{
/**
 * Bootstrap services.
 *
 * @return void
 */
public function boot()
{

}

/**
 * Register services.
 *
 * @return void
 */
public function register()
{
    if (\Schema::hasTable('parameter_settings')) {
        $settings = DB::table('parameter_settings')->first();
        if ($settings) //checking if table is not empty
        {
            $config = array(
                'driver' => env('SESSION_DRIVER', 'file'),
                'lifetime' => env('SESSION_LIFETIME', $settings->session_expired),
                'expire_on_close' => true,
            );
            Config::set('session', $config);
        }
    }
  }
}

这是我config/app.php注册服务提供商:

    /*
     * Application Service Providers...
     */
    App\Providers\AppServiceProvider::class,
    App\Providers\AuthServiceProvider::class,
    // App\Providers\BroadcastServiceProvider::class,
    App\Providers\EventServiceProvider::class,
    App\Providers\RouteServiceProvider::class,
    App\Providers\ParameterSettingServiceProvider::class,

如何解决这个错误?

您应该使用服务提供商的 boot 方法而不是 register 方法。在所有其他服务提供者的 register 方法具有 运行.

之后,提供者的 boot 方法将 运行

如果您只想设置 1 个配置值,您可以这样做。您不需要覆盖整个 session 配置密钥(其中包含 15 个变量,请检查您的 config/session.php 文件)。这就是为什么您会不断收到有关未定义索引的错误的原因,因为这些配置变量需要存在。

在 运行 时间设置配置值的文档示例是如何按名称设置单个键(使用 "dot" 语法):

Config::set('session.lifetime', $settings->session_expired);

Laravel 5.8 Docs - Configuration - Accessing Configuration Values