web-dev-qa-db-fra.com

Paramètres de configuration dynamique Laravel

J'utilise un package dans mon projet et il stocke un paramètre dans config/packagename

Je voudrais changer dynamiquement cette valeur dans le fichier de configuration, voici à quoi ressemble la structure du fichier;

<?php

return [
    'view_id' => '118754561',

    'cache_lifetime_in_minutes' => 60 * 24,
];

Je voudrais changer quelque chose comme ça - 

'view_id' => Auth::user()->id,

Pouvez-vous faire cela dans le fichier de configuration, ou devez-vous stocker une sorte de variable à mettre à jour ultérieurement dans un contrôleur. Existe-t-il un moyen de placer ces variables dans un fichier env et d’accéder à ces nouvelles variables à partir d’un contrôleur?

22
Courtney Ball

C’est aussi une solution générique pour mettre à jour dynamiquement votre fichier .env (en respectant les paires clé/valeur individuelles)

  1. Modifiez le paramètre dans votre config/packagename comme suit:
return [
    'view_id' => env('VIEW_ID', '118754561'),
    etc...
]
  1. Ajoutez une valeur initiale dans .env:

    VIEW_ID = 118754561

  2. Dans un contrôleur approprié (par exemple, AuthController), utilisez le code ci-dessous et appelez la fonction comme suit: updateDotEnv('VIEW_ID', Auth::User()->id)

    protected function updateDotEnv($key, $newValue, $delim='')
    {
    
        $path = base_path('.env');
        // get old value from current env
        $oldValue = env($key);
    
        // was there any change?
        if ($oldValue === $newValue) {
            return;
        }
    
        // rewrite file content with changed data
        if (file_exists($path)) {
            // replace current value with new value 
            file_put_contents(
                $path, str_replace(
                    $key.'='.$delim.$oldValue.$delim, 
                    $key.'='.$delim.$newValue.$delim, 
                    file_get_contents($path)
                )
            );
        }
    }
    

(Le paramètre $ delim est nécessaire si vous souhaitez rendre cette fonction plus générique afin de pouvoir utiliser des paires clé = valeur dans .env où la valeur doit être placée entre guillemets car elles contiennent des espaces).

Certes, cela peut ne pas être une bonne solution si vous avez plusieurs utilisateurs en même temps utilisant ce paquet dans votre projet. Donc, cela dépend de ce que vous utilisez ce paquet.

NB: Vous devez bien sûr rendre la fonction publique si vous envisagez de l'utiliser depuis d'autres classes.

18
matthiku

Vous pouvez faire comme ça.

Dans votre fichier de configuration personnalisé. Ajouter le code suivant Vous pouvez envoyer votre identifiant de manière dynamique à partir de la chaîne de requête.

'view_id' => isset($_REQUEST['view_id'])?$_REQUEST['view_id']:null,

Pour obtenir un identifiant de vue

 echo config('app.view_id'); // app is config file name
3
Kundan roy

Tous les fichiers de configuration du framework Laravel stockés dans le répertoire app/config.

par conséquent, si nous devons créer des valeurs de configuration personnalisées, il est préférable de conserver notre configuration personnalisée dans un fichier personnalisé . Nous devons donc créer un fichier personnalisé dans app/config directory

Laravel lit automatiquement ce fichier en tant que fichier de configuration et le gèrera automatiquementDans cette rubrique, nous travaillons avec une configuration personnalisée dans laravel et obtenons une valeur de configuration dans le contrôleur ou la vue.

Maintenant, je vais vous expliquer comment créer un fichier de configuration personnalisé dans Laravel afin que nous puissions implémenter une fonctionnalité dynamique.

créez un fichier dans app/config/custom.php qui a des clés de configuration et une valeur comme: -

return array(
  'my_val' => 'mysinglelue',
  'my_arr_val' => array('1', '2', '3'),
);

Maintenant, nous devons obtenir ces valeurs de configuration dans view/controller afin que nous utilisions la méthode Config class get() pour cette méthode.

Syntaxe:

echo Config::get('filename.arraykey');

filename est le config file’s name, personnalisé dans notre cas, et key est le array key de la valeur à laquelle vous souhaitez accéder.

Dans notre cas ce sera comme:

echo Config::get('custom.my_val');

Créer une configuration d’exécution dans laravel: -  

Les valeurs de configuration définies au moment de l'exécution le seront pour la demande en cours et ne seront pas reportées aux demandes suivantes.

Vous pouvez passer les valeurs dynamiques ici pour pouvoir modifier le fichier de configuration de manière dynamique ici en utilisant les fonctions isset().

Comme dans le cas où le @Kundan roy suggéré dans l’usage de isset() la même condition s’applique ici Mais celle-ci est la méthode alternative qui fonctionnera pour le réglage dynamique des valeurs dans la configuration.

Config::set('custom.my_val', 'mysinglelue');

Par conséquent, en utilisant cette méthode, vous pouvez créer les fichiers de configuration dynamiques en fonction des valeurs dont vous avez besoin.

3
Naresh Kumar .P

Utilisez ceci dans le contrôleur lorsque vous devez changer. 

  <?php

    use Illuminate\Support\Facades\Config;

     //[...]

    $user_id =  Auth::user()->id; 

    Config::set('view_id', $user_id );
2
Shahid Chaudhary

config (['packagename.view_id' => Auth :: user () -> id]);

0
Kundan roy

Depuis Laravel v5.2, vous pouvez définir dynamiquement les valeurs de configuration de cette façon :

<?php

config(['app.timezone' => 'America/Chicago']);

$value = config('app.timezone');

echo $value;
// output: 'America/Chicago'
0
lasec0203