использовать динамическое значение в файле конфигурации - PullRequest
0 голосов
/ 29 сентября 2019

У меня есть файл конфигурации для платежей, я должен использовать динамическое значение (которое загружается из дБ) для merchant-id ключа:

в AppServiceProvider в boot методе я пишу это

 $zarinpal = PaymentConfig::where('slug', 'zarinpal')->first();

        config()->set(['app.zarinpal' => ['merchant' => $zarinpal->merchant ?? 0]]);

но значение config('app.zarinpal')["merchant"] там пусто ... как я могу решить эту проблему?

return [

    //-------------------------------
    // Timezone for insert dates in database
    // If you want Gateway not set timezone, just leave it empty
    //--------------------------------
    'timezone' => 'Asia/Tehran',

    //--------------------------------
    // Zarinpal gateway
    //--------------------------------
    'zarinpal' => [
        'merchant-id'  => config('app.zarinpal')["merchant"],//'xx',
        'type'         => 'zarin-gate',             // Types: [zarin-gate || normal]
        'callback-url' => '/',
        'server'       => 'germany',                // Servers: [germany || iran || test]
        'email'        => 'email@gmail.com',
        'mobile'       => '09xxxxxxxxx',
        'description'  => 'description',
    ],

1 Ответ

0 голосов
/ 29 сентября 2019

Вы не можете использовать вспомогательные функции, кроме env () внутри файлов конфигурации в Laravel, потому что эти файлы загружаются и кэшируются задолго до вас AppServiceProvider в конвейере и, следовательно, вы получаетеnull

Если вы хотите получить что-то из базы данных простым глобальным вызовом функции, сделайте свой собственный

Например

app/Helpers.php

<?php

// Name it however you want
function getMerchant()
{
  $zarinpal = PaymentConfig::where('slug', 'zarinpal')->first();
  return $zarinpal
}

Загрузите его в карту классов композитора через composer.json

"autoload": {
        "psr-4": {
            "App\\": "app/"
        },
        "classmap": [
            "database/seeds",
            "database/factories"
        ],
        "files": [
            "app/Helpers.php"
        ]
    },

Теперь вы можете вызвать getMerchant() в любом месте вашего кода (кроме config) и получить запись из базы данных


Вставить через помощника, используя точечную нотацию

config(['app.zarinpal.merchant' => $zarinpal->merchant ?? 0]);

И получить к нему доступ вот так

config('app.zarinpal.merchant');

Обратите внимание, что это плохое проектное решение, вы должны принятьвместо этого вспомогательная функция, потому что файлы конфигурации загружаются раньше всего

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...