【问题标题】:Use config file in App\Libraries Laravel在 App\Libraries Laravel 中使用配置文件
【发布时间】:2016-02-15 22:16:25
【问题描述】:

我在 App\Libraries 中有一个非 laravel 库,并且我有文件 providers.php

    <?php

return [

    'slsp'=> [
        'SLSP_SPOROPAY_PU_PREDCISLO'=> '000000',
        'SLSP_SPOROPAY_PU_CISLO'=> '0013662162',
        'SLSP_SPOROPAY_PU_KBANKY'=> '0900',
        'SLSP_SPOROPAY_SHAREDSECRET'=> 'Z3qY08EpvLlAAoMZdnyUdQ==',
        'SLSP_SPOROPAY_REDIRECTURLBASE'=> 'http://epaymentsimulator.monogram.sk/SLSP_SporoPay.aspx',
    ],

    'paypal'=>[

        'PAYPAL_USERNAME'=>'xxx',
        'PAYPAL_PASSWORD'=>'xxx',
        'PAYPAL_SIGNATURE'=>'xxxx',
        'PAYPAL_CONNECTIONTIMEOUT'=>'3333',
        'PAYPAL_RETRY'=>'true',
        'PAYPAL_OGENABLED'=>'true',
        'PAYPAL_FILENAME'=>'foo/bar',
        'PAYPAL_LOGLEVEL'=>'5',

    ]

];

比我想得到和设置这个值像

Config::get('providers.paypal.username');
Config::set('providers.paypal.username', 'someName');

当我想使用它时我必须做什么?

谢谢

【问题讨论】:

    标签: php laravel config


    【解决方案1】:

    更好的方法是创建一个 laravel 提供程序并在应用程序提供程序中注册该提供程序。

    例如:

    你的情况

    php artisan make:provider EPaymentProvider

    它将在providers 目录中创建一个提供程序文件EPaymentProvider.php

    现在像这样修改你的Library/EPayment.php文件

    <?php
    
    class EPayment {
    
        private static $_instance = 'null';
        public $credentials = [
            'PAYPAL_USERNAME'=>'xxx',
            'PAYPAL_PASSWORD'=>'xxx',
            'PAYPAL_SIGNATURE'=>'xxxx',
            'PAYPAL_CONNECTIONTIMEOUT'=>'3333',
            'PAYPAL_RETRY'=>'true',
            'PAYPAL_OGENABLED'=>'true',
            'PAYPAL_FILENAME'=>'foo/bar',
            'PAYPAL_LOGLEVEL'=>'5',
        ];
    
        /**
         * @param array $array
         */
        public function setPayPalCredential(array $array){
            $this->credentials = $array;
        }
    
        /**
         * @return EPayment|string
         */
        public static function PayPal(){
            if(self::$_instance === 'null')
                self::$_instance = new self;
    
            return self::$_instance;
        }
    
        /**
         * @param $key
         * @return mixed
         */
        public function getPayPalCredential($key){
            return $this->credentials[$key];
        }
    }
    

    并在EPaymentProvider.phpregister方法中添加Libraries/EPayment.php

    <?php
    
    namespace App\Providers;
    
    use Illuminate\Support\ServiceProvider;
    
    class HelperServiceProvider extends ServiceProvider
    {
        /**
         * Bootstrap the application services.
         *
         * @return void
         */
        public function boot()
        {
            //
        }
    
        /**
         * Register the application services.
         *
         * @return void
         */
        public function register()
        {
            require base_path().'/app/Libraries/EPayment.php';
        }
    }  
    

    现在在config/app.php Provider 数组中添加EPaymentProvider

    现在你可以使用
    Epayment::PayPal()-&gt;setPayPalCredential(['PAYPAL_USERNAME' =&gt; 'New Username']);

    Epayment::PayPal()-&gt;getPayPalCredential('PAYPAL_USERNAME')

    让我知道它是否有效。

    【讨论】:

    • 嗨,当按照您的步骤操作时,我收到此错误:“App\Providers\EPaymentProvider::register(): Failed opening required '/var/www/html/pay/app/Libraries/TomajPayGateways/EPayment .php.php' (include_path='.:/usr/share/php:/usr/share/pear')"
    • 可能是权限问题。并且可能是一些错字,因为/var/www/html/pay/app/Libraries/TomajPayGateways/EPayment.php.php 包含两个.php 扩展名。如果有任何解决办法,请告诉我。
    • 是的,有两次 .php,但现在我有 Class 'App\Providers\EPaymentProvider' not found 但 EpaymentProvider 在 /Providers 中。
    • 试试php artisan optimizecomposer dump-autoload
    • composer dump-autoload 完成正确但php artisan optimize 告诉我:Class 'App\Providers\EPaymentProvider' not found in /var/www/html/pay/vendor/laravel/framework/src/Illuminate/Foundation/ProviderRepository.php on line 146 [Symfony\Component\Debug\Exception\FatalErrorException] Class 'App\Providers\EPaymentProvider' not found
    【解决方案2】:

    首先,该文件位于 config 文件夹之外,因此无法使用 Config 外观进行设置或获取。要继续使用提供程序文件,请将其移至 config 目录,一切都会为您工作。

    【讨论】:

    • 如果我需要应用程序/库中的文件怎么办?
    【解决方案3】:

    要使用点表示法检索config 值,您可以在providers.php 中执行以下操作:

    $paypalArray = ['paypal' =>
        [
            'PAYPAL_USERNAME'=>'xxx',
            'PAYPAL_PASSWORD'=>'xxx',
            'PAYPAL_SIGNATURE'=>'xxxx',
            'PAYPAL_CONNECTIONTIMEOUT'=>'3333',
            'PAYPAL_RETRY'=>'true',
            'PAYPAL_OGENABLED'=>'true',
            'PAYPAL_FILENAME'=>'foo/bar',
            'PAYPAL_LOGLEVEL'=>'5']
        ];
    
    config($paypalArray);
    

    现在您可以检索像config('paypal.PAYPAL_USERNAME') 这样的值。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-11-13
      • 2019-07-04
      • 1970-01-01
      • 1970-01-01
      • 2023-03-20
      • 2020-04-14
      • 2018-10-28
      • 2021-11-04
      相关资源
      最近更新 更多