无法访问ServiceProvider中的config()| Laravel

时间:2018-07-24 16:22:50

标签: php laravel paypal paypal-rest-sdk

我为Paypal创建了自定义服务提供商。 当我尝试从提供程序内部访问config时,它返回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'
]];

.env文件中存在PAYPAL凭据。

我曾尝试清除配置并再次对其进行缓存,但这没有用。

更新

似乎 register 方法在服务提供商中不起作用。 但是我已经在config / app.php

中注册了提供程序

2 个答案:

答案 0 :(得分:2)

没有更多信息...

清除配置缓存:php artisan config:clear

如果您有一个缓存的配置,并且向配置文件或环境中添加了任何内容,包括向config/app.php添加了另一个服务提供商,则它将不会被拾取,因为它使用了配置的缓存版本。

您只需在更改任何配置文件或环境后进入tinker并请求这些配置值,即可验证这种情况。

答案 1 :(得分:0)

在配置文件夹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');