Не удается получить доступ к config() в ServiceProvider | Ларавель

Я создал собственного поставщика услуг для PayPal. Когда я пытаюсь получить доступ к конфигурации изнутри провайдера, он возвращает null.

Ниже приведен код, который я написал.

public function register()
{
    $this->app->singleton(ApiContext::class, function($app){
        $paypalConf = $app['config']->get('paypal');
        $apiContext = new ApiContext(new OAuthTokenCredential(
            $paypalConf['client_id'],$paypalConf['client_secret']
        )); 
        $apiContext->setConfig($paypalConf['settings']);
        return $apiContext;
    });
}

Но выдает следующую ошибку

if (empty($credObj)) {
        throw new PayPalInvalidCredentialException("Credential not found for " .  ($userId ? $userId : " default user") .
        ". Please make sure your configuration/APIContext has credential information");
    }

«Учетные данные для пользователя по умолчанию не найдены. Убедитесь, что в вашей конфигурации/APIContext есть учетные данные.

Это, безусловно, потому, что мой файл конфигурации возвращает значение null.

Вот мой paypal.php

return [
'client_id' => env('PAYPAL_CLIENT_ID', ''),
'client_secret' => env('PAYPAL_SECRET', ''),
'settings' => [
    'mode' => env('PAYPAL_MODE', ''),
    'http.ConnectionTimeOut' => 30,
    'log.LogEnabled' => true,
    'log.FileName' => storage_path().'/logs/paypal.log',
    'log.LogLevel' => 'ERROR'
]];

и учетные данные PAYPAL существуют в файле .env.

Я попытался очистить конфигурацию и снова кэшировать ее, но это не сработало.

Обновить

Похоже, метод register не работает у поставщика услуг. Но я прописал провайдера в config/app.php


person Saud Qureshi    schedule 24.07.2018    source источник
comment
Вы пробовали dd($paypalConf, $app['config']->get('app.name')), в провайдере после первой строки? Чую опечатку вроде ошибки.   -  person Kyslik    schedule 24.07.2018
comment
@Kyslik dd там не работает.   -  person Saud Qureshi    schedule 24.07.2018
comment
Вы зарегистрировали поставщика услуг в config/app.php?   -  person Kyslik    schedule 24.07.2018
comment
@Kyslik да, провайдер зарегистрирован в массиве провайдеров.   -  person Saud Qureshi    schedule 24.07.2018
comment
Затем выйдите из закрытия, вам нужно знать, выполняется ли метод регистрации.   -  person Kyslik    schedule 24.07.2018
comment
@Kyslik похоже, что метод регистрации не выполняется!. Что делать?, И да, я зарегистрировал провайдера. :(   -  person Saud Qureshi    schedule 24.07.2018
comment
Вы использовали команду artisan для создания провайдера? Вы composer dump-autoload?   -  person Kyslik    schedule 24.07.2018
comment
@Kyslik да, я снова автоматически загрузил файлы с помощью автозагрузки дампа композитора.   -  person Saud Qureshi    schedule 24.07.2018
comment
Теперь попробуйте composer dump-autoload -o (оптимизировать), и если это сработает, у вас просто опечатка или неправильное пространство имен. Как я уже сказал в первом комментарии, я чувствую опечатку.   -  person Kyslik    schedule 24.07.2018
comment
@Kyslik Боюсь, это не опечатка. Я тоже пробовал оптимизировать флаг.   -  person Saud Qureshi    schedule 24.07.2018
comment
Какая это версия Laravel?   -  person Kyslik    schedule 24.07.2018
comment
Ларавель v5.6, PHP7.2   -  person Saud Qureshi    schedule 24.07.2018


Ответы (2)


Без дополнительной информации...

очистить кеш конфигурации: php artisan config:clear

Если у вас есть кешированная конфигурация, и вы добавляете что-либо в файлы конфигурации или env, включая другого поставщика услуг для config/app.php, он не будет получен, потому что он использует кешированную версию вашей конфигурации.

Вы можете проверить такие вещи, просто зайдя в tinker и запросив эти значения конфигурации после внесения изменений в любые файлы конфигурации или env.

person lagbox    schedule 24.07.2018
comment
Я уже очистил кешированный конфиг. Это все еще не сработало. Я удалил поставщика услуг и перешел к созданию экземпляра класса вручную. Я благодарю вас за вашу помощь. - person Saud Qureshi; 25.07.2018

В папке конфигурации paypal.php не paypal.config :

<?php

    return [
        'client_id' => env('PAYPAL_CLIENT_ID', ''),
        'client_secret' => env('PAYPAL_SECRET', ''),
        'settings' => [
            'mode' => env('PAYPAL_MODE', ''),
            'http.ConnectionTimeOut' => 30,
            'log.LogEnabled' => true,
            'log.FileName' => storage_path().'/logs/paypal.log',
            'log.LogLevel' => 'ERROR'
    ]];

Затем вы можете получить значения:

Config::get('paypal.client_id');
Config::get('paypal.settings.mode');
person Maraboc    schedule 24.07.2018
comment
Извините, это опечатка, это config/paypal.php - person Saud Qureshi; 24.07.2018
comment
Вы создали файл в папке конфигурации? и вы использовали use Illuminate\Support\Facades\Config; в верхней части поставщика услуг? - person Maraboc; 24.07.2018
comment
папка конфигурации, которая поставляется с папкой laravel, мой paypal.php находится в этой папке. и да, я использую Config; использовать конфигурацию - person Saud Qureshi; 24.07.2018
comment
попробуйте вспомогательный метод config('paypal.client_id'); ! - person Maraboc; 24.07.2018
comment
нет, сначала я пробовал хелпер, потом переключился на app['config'] и даже на Facade. Ни один из них не работал. Я буквально дергаю себя за волосы. - person Saud Qureshi; 24.07.2018