ไม่สามารถเข้าถึง config() ใน ServiceProvider | ลาราเวล

ฉันสร้างผู้ให้บริการแบบกำหนดเองสำหรับ paypal เมื่อฉันพยายามเข้าถึงการกำหนดค่าจากภายในผู้ให้บริการ มันคืนค่าเป็นโมฆะ

ด้านล่างเป็นรหัสที่ฉันเขียน

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 ของคุณมีข้อมูลรับรอง

ซึ่งแน่นอนว่าเป็นเพราะไฟล์ปรับแต่งของฉันส่งคืนค่าว่าง

นี่คือ 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

ฉันได้ลองล้างการกำหนดค่าและแคชอีกครั้ง แต่มันไม่ทำงาน

อัปเดต

ดูเหมือนว่าวิธี ลงทะเบียน จะไม่ทำงานในผู้ให้บริการ แต่ฉันได้ลงทะเบียนผู้ให้บริการใน 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
คุณใช้คำสั่งช่างเพื่อสร้างผู้ให้บริการหรือไม่? คุณcomposer dump-autoloadใช่ไหม?   -  person Kyslik    schedule 24.07.2018
comment
@Kyslik ใช่ ฉันโหลดไฟล์อัตโนมัติอีกครั้งผ่าน composer dump-autoload   -  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
คุณสร้างไฟล์ในโฟลเดอร์ config หรือไม่? และคุณใช้ use Illuminate\Support\Facades\Config; ที่ด้านบนสุดของผู้ให้บริการหรือไม่ - person Maraboc; 24.07.2018
comment
โฟลเดอร์ config ที่มาพร้อมกับโฟลเดอร์ laravel paypal.php ของฉันอยู่ในโฟลเดอร์นั้น และใช่ ฉันกำลังใช้ Config ใช้การกำหนดค่า - person Saud Qureshi; 24.07.2018
comment
ลองวิธีช่วย config('paypal.client_id'); ! - person Maraboc; 24.07.2018
comment
ไม่ ฉันกำลังลองใช้ตัวช่วยก่อน จากนั้นจึงเปลี่ยนไปที่ app['config'] และแม้แต่ Facade ไม่มีใครทำงานเลย ฉันกำลังดึงผม rn อย่างแท้จริง - person Saud Qureshi; 24.07.2018