Tengo un archivo de configuración para pagos, debería usar un valor dinámico (que se está cargando desde la base de datos) para la clave merchant-id:

En AppServiceProvider en el método boot escribo esto

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

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

Pero el valor de config('app.zarinpal')["merchant"] es nulo allí ... ¿cómo puedo solucionar este problema?

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
devmrh 29 sep. 2019 a las 13:24

1 respuesta

La mejor respuesta

No puede usar funciones auxiliares excepto env () dentro de los archivos de configuración en Laravel porque esos archivos se cargan y almacenan en caché mucho antes AppServiceProvider en la canalización y, por lo tanto, obtienes null

Si desea obtener algo de la base de datos mediante una simple llamada a una función global, cree la suya propia

Por ejemplo,

app/Helpers.php

<?php

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

Cárgalo en el mapa de clases del compositor a través de composer.json

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

Ahora puede llamar a getMerchant() en cualquier lugar de su código (excepto config) y sacar el registro de la base de datos


Insertar a través del ayudante usando notación de puntos

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

Y acceder a él como tal

config('app.zarinpal.merchant');

Tenga en cuenta que esta es una mala decisión de diseño, debe hacer una función de ayuda global en su lugar porque los archivos de configuración se cargan antes que cualquier otra cosa

0
Salim Djerbouh 5 oct. 2019 a las 10:46