Tidak dapat mengakses config() di ServiceProvider | Laravel

Saya membuat penyedia layanan khusus untuk PayPal. Ketika saya mencoba mengakses konfigurasi dari dalam penyedia, ia mengembalikan nol.

Di bawah ini adalah kode yang saya tulis.

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;
    });
}

Tapi itu menimbulkan kesalahan berikut

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

"Kredensial tidak ditemukan untuk pengguna default. Pastikan konfigurasi/APIContext Anda memiliki informasi kredensial

Yang pastinya karena file konfigurasi saya mengembalikan nol.

Ini paypal.php saya

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'
]];

dan kredensial PAYPAL ada di file .env.

Saya telah mencoba menghapus konfigurasi dan menyimpannya lagi dalam cache, tetapi tidak berhasil.

Pembaruan

Sepertinya metode daftar tidak berfungsi di penyedia layanan. Tapi saya sudah mendaftarkan penyedianya di config/app.php


person Saud Qureshi    schedule 24.07.2018    source sumber
comment
Sudahkah Anda mencoba dd($paypalConf, $app['config']->get('app.name')), di penyedia layanan setelah baris pertama? Saya mencium adanya kesalahan ketik.   -  person Kyslik    schedule 24.07.2018
comment
@Kyslik dd tidak berfungsi di sana.   -  person Saud Qureshi    schedule 24.07.2018
comment
Sudahkah Anda mendaftarkan penyedia layanan di config/app.php?   -  person Kyslik    schedule 24.07.2018
comment
@Kyslik ya penyedia terdaftar di array penyedia.   -  person Saud Qureshi    schedule 24.07.2018
comment
Kemudian keluar dari penutupan, Anda perlu mengetahui apakah metode register sedang dijalankan.   -  person Kyslik    schedule 24.07.2018
comment
@Kyslik sepertinya metode register tidak dijalankan!. Apa yang harus dilakukan?, Dan ya saya sudah mendaftarkan penyedianya. :(   -  person Saud Qureshi    schedule 24.07.2018
comment
Apakah Anda menggunakan perintah artisan untuk membuat penyedia? Apakah kamu composer dump-autoload?   -  person Kyslik    schedule 24.07.2018
comment
@Kyslik ya, saya memuat ulang file secara otomatis melalui composer dump-autoload.   -  person Saud Qureshi    schedule 24.07.2018
comment
Sekarang coba composer dump-autoload -o (optimalkan) dan jika berhasil, Anda hanya salah ketik, atau namespace salah. Seperti yang saya katakan di komentar pertama, saya mencium adanya kesalahan ketik.   -  person Kyslik    schedule 24.07.2018
comment
@Kyslik Saya khawatir ini bukan salah ketik. Saya telah mencoba mengoptimalkan bendera juga.   -  person Saud Qureshi    schedule 24.07.2018
comment
Versi Laravel apa ini?   -  person Kyslik    schedule 24.07.2018
comment
Laravel v5.6, PHP7.2   -  person Saud Qureshi    schedule 24.07.2018


Jawaban (2)


Tanpa informasi lebih lanjut...

bersihkan cache konfigurasi: php artisan config:clear

Jika Anda memiliki konfigurasi yang di-cache dan Anda menambahkan apa pun ke file konfigurasi atau env, termasuk penyedia layanan lain ke config/app.php, konfigurasi tersebut tidak akan diambil karena menggunakan versi konfigurasi yang di-cache.

Anda dapat memverifikasi hal semacam ini hanya dengan masuk ke tinker dan meminta nilai konfigurasi ini setelah melakukan perubahan pada file konfigurasi atau env.

person lagbox    schedule 24.07.2018
comment
Saya sudah menghapus konfigurasi cache. Itu masih tidak berhasil. Saya menghapus penyedia layanan dan menggunakan instantiasi kelas manual. Saya berterima kasih atas bantuan Anda. - person Saud Qureshi; 25.07.2018

Di folder konfigurasi paypal.php bukan 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'
    ]];

Maka Anda bisa mendapatkan nilainya:

Config::get('paypal.client_id');
Config::get('paypal.settings.mode');
person Maraboc    schedule 24.07.2018
comment
Maaf itu salah ketik, ini config/paypal.php - person Saud Qureshi; 24.07.2018
comment
Apakah Anda membuat file di folder config? dan apakah Anda menggunakan use Illuminate\Support\Facades\Config; di bagian atas penyedia layanan? - person Maraboc; 24.07.2018
comment
folder config yang disertakan dengan folder laravel paypal.php saya berada di folder itu. dan ya, saya menggunakan Config; gunakan Konfigurasi - person Saud Qureshi; 24.07.2018
comment
coba metode pembantu config('paypal.client_id'); ! - person Maraboc; 24.07.2018
comment
tidak, saya mencoba helpernya terlebih dahulu, lalu beralih ke app['config'] dan bahkan Facade. Tak satu pun dari mereka berhasil. Saya benar-benar menarik rambut rn. - person Saud Qureshi; 24.07.2018