Неопределенный индекс: путь при добавлении нового настраиваемого поставщика услуг в 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,

Как исправить эту ошибку?


person Rahmat Effendi    schedule 26.11.2019    source источник
comment
Можете ли вы опубликовать полную ошибку и трассировку стека?   -  person Jerodev    schedule 26.11.2019
comment
Я предполагаю, что Undefined index: path относится к настройке сеанса/файлов cookie в config/session.php.   -  person KFoobar    schedule 26.11.2019
comment
вы бы сделали это в boot, а не в register, если бы вы собирались сделать что-то подобное, и я бы не вызывал env вне файлов конфигурации   -  person lagbox    schedule 26.11.2019
comment
@Jerodev Я сделал скриншот ошибки   -  person Rahmat Effendi    schedule 26.11.2019
comment
@lagbox, я пробовал поставить его в boot, но я получил эту ошибку Undefined index: lottery   -  person Rahmat Effendi    schedule 26.11.2019
comment
@lagbox, я пытался установить одно значение и не использовать env, как вы предлагали раньше, просто на всю жизнь, как это 'lifetime' => $settings->session_expired,, но я получаю сообщение об ошибке, подобное этому Session store not set on request   -  person Rahmat Effendi    schedule 26.11.2019
comment
это не то, как вы устанавливаете одно значение конфигурации, которое находится в массиве... эта новая ошибка связана с тем, что вы пытаетесь получить доступ к сеансу в начале жизненного цикла... сеанса вообще нет, пока промежуточное ПО StartSession не побежал   -  person lagbox    schedule 26.11.2019


Ответы (1)


Вы должны использовать метод boot поставщика услуг, а не метод register. Метод boot поставщика будет запущен после того, как будут выполнены все остальные методы register поставщика услуг.

Если вы хотите установить только одно значение конфигурации, вы можете сделать это. Вам не нужно перезаписывать весь ключ конфигурации session (который содержит 15 переменных, проверьте файл config/session.php). Вот почему вы будете продолжать получать ошибки о неопределенных индексах, потому что эти переменные конфигурации должны существовать.

Пример документации для установки значения конфигурации во время выполнения - это то, как вы устанавливаете один ключ по имени (используя синтаксис «точка»):

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

Документация по Laravel 5.8 — Конфигурация — Доступ к значениям конфигурации

person lagbox    schedule 26.11.2019