Laravel dynamique des paramètres de configuration
Je suis en utilisant un paquet dans mon projet et il stocke un paramètre à l'intérieur de config/packagename
Je voudrais changer dynamiquement cette valeur dans le fichier de config, c'est la façon dont la structure du fichier ressemble actuellement;
<?php
return [
'view_id' => '118754561',
'cache_lifetime_in_minutes' => 60 * 24,
];
Je voudrais le changer pour quelque chose de ce genre -
'view_id' => Auth::user()->id,
Pouvez-vous faire cela dans le fichier de config, ou avez-vous de stocker une sorte de variable d'être mis à jour plus tard au sein d'un contrôleur. Est-il un moyen de placer ces variables dans un fichier de configuration et l'accès à ces nouvelles variables à partir d'un contrôleur?
- Êtes-vous utiliser Sentry ?
- Contexte serait très bien pour ce que vous essayez de faire. Basé sur ce que vous êtes en me montrant, oui, c'est possible.
- qui Laravel version utilisez-vous ?
- Toutes mes excuses à l'aide de Laravel 5.2 je suis en train de mettre à jour un ID statique définie dans un fichier de config pour un stockées dans une base de données.
- d'abord, vous devez vérifier si l'utilisateur est bien connecter si (Auth::check()) { // L'utilisateur est connecté... } que de laravel 4.2 Auth::id();
- Mais vous ne pouvez pas écrire ce code dans un fichier de config, il renvoie une erreur 500
- La config est de lire trop tôt dans le processus de la session (qui auth utilise) seront disponibles. Vous pouvez définir cette configuration au moment de l'exécution en tout temps après la séance commencée.
Config::set(...)
- Pouvez-vous donner un exemple?
- Le forfait utilisez-vous?
- À l'aide de Laravel 5.2 et le package suivant spatie laravel-analytics
- Salut Courtney, il semble que vous essayez de traiter une partie de votre contexte (comme l'utilisateur, la langue, l'id client) comme config paramètre. Il pourrait sembler comme une bonne idée, cependant il a beaucoup d'inconvénients, disons que vous voulez envoyer un e-mails à partir de tâche cron pour plusieurs utilisateurs. Je suggère de passer votre contexte (comme userId) à partir de contrôleurs des services (et plus profond) directement, il peut être fait simplement en $userId argument ou en utilisant une sorte de Contexte objet qui va contenir le champ d'application, de sorte que votre code ne s'appuient pas sur des paramètres globaux, mais directement transmis contexte.
- avez-vous essayer cette laracasts.com/discuss/channels/general-discussion/...
- Salut à Tous, j'ai fourni un moyen de résoudre ce problème. Cela pourrait être la méthode facile pour résoudre le problème, en dépit des autres, qui a répondu aux questions. Depuis, nous pouvons définir le fichier de config dynamiquement à la volée. Amusez-vous bien 🙂
- config(['packagename.view_id' => Auth::user()->id]);
Vous devez vous connecter pour publier un commentaire.
C'est aussi une solution générique de mettre à jour dynamiquement votre .fichier env (respectifs de l'individu paires clé/valeur)
Ajouter une valeur initiale dans .env:
VIEW_ID=118754561
Dans un contrôleur approprié (par exemple, l'action authcontroller), utilisez le code ci-dessous et appeler la fonction comme ceci:
updateDotEnv('VIEW_ID', Auth::User()->id)
(Le $delim paramètre n'est nécessaire que si vous voulez rendre cette fonction plus générique afin de travailler avec des paires valeur /clé dans .env où la valeur doit être entre guillemets parce qu'ils contiennent des espaces).
Certes, ce ne serait pas une bonne solution si vous avez plusieurs utilisateurs en même temps à l'aide de ce package dans votre projet. Donc, cela dépend de ce que vous êtes en utilisant ce paquet pour.
NB: Vous devez faire la fonction publique bien sûr, si vous prévoyez de l'utiliser à d'autres classes.
'cavPref' => ['F','C','R','G','H','E']
?Tous les fichiers de configuration du framework Laravel stockées dans le
app/config
répertoire.donc, si nous avons besoin de créer une configuration personnalisée, il serait mieux de séparer notre configuration personnalisée dans un fichier personnalisé.
nous avons donc besoin de créer un fichier personnalisé dans
app/config directory
.Laravel de lecture automatique de ce fichier comme un fichier de config et de s'auto gérer
Dans cette rubrique, nous travaillons avec configuration personnalisée dans laravel et obtenir la valeur de configuration dans le contrôleur ou de la vue.
Maintenant, je vais vous expliquer comment créer un fichier de config dans Laravel, de sorte que nous pouvons mettre en œuvre caractéristique dynamique plus de de ce.
de créer un fichier dans
app/config/custom.php
qui ont config des touches et de la valeur comme:-Désormais besoin de ces config valeurs en vue/contrôleur nous allons donc utiliser la Config de classe
get()
méthode pour cetteSyntaxe:
où
filename
est leconfig file’s name
, est de coutume dans notre cas, et la clé est laarray key
de la valeur que vous êtes désireux de l'accès.Dans Notre cas, elle le sera aussi:
Créer des temps d'exécution de la configuration dans laravel :-
Les valeurs de Configuration qui sont fixés au moment de l'exécution sont fixés pour la requête en cours, de ne pas être reporté sur les demandes ultérieures.
Comme à l' @Kundan roy, comme l'a suggéré à l'aide de la
isset()
la même condition s'applique ici. Mais celui-ci est la méthode alternative qui va travailler pour la dynamique de réglage des valeurs dans le fichier config.Donc en utilisant cette méthode, vous pouvez créer la dynamique des fichiers de configuration sur la base des valeurs que vous avez besoin.
Config::set()
pour ce genre de scénarios.Config::set()
méthode et cela fonctionne à la perfection. Espère que vous avez toutes les autres solutions de rechange à la question. Je suggère cette méthode. C'est tout. Je suis sûr que cela fonctionnera pour la configuration dynamique dans le laravel.Si vous souhaitez éditer les fichiers de configuration (soit
config/packagename.php
ou.env
), alors vous pouvez suivre matthiku réponse.Cependant, si j'étais vous, je ferais plutôt souhaitez configurer cette 3ème partie, en fonction de la valeur définie au moment de l'exécution, au lieu de modifier n'importe quel fichier (qui ne prendra pas effet jusqu'à la prochaine demande, lorsque l'env les valeurs sont lues à nouveau).
Donc, à mon avis, la meilleure façon de le faire est:
magasin sur la valeur souhaitée dans la config de données:
config(['packagename.view_id' => Auth::user()->id]);
Cependant, vous remarquerez peut-être ce ne sera probablement pas travailler: le fournisseur de services qui offre le service que vous avez besoin est souvent enregistré avant le traitement de la demande, qui est, avant votre config changement a lieu. De sorte que vous obtenez toujours le service avec les anciennes valeurs config.
Alors, comment avez-vous pu le fournisseur de service d'être appelé qu'en cas de besoin, et pas avant (qui est, après la définition de la nouvelle valeur de configuration)? Vous pourriez faire un différés fournisseur. En suivant l'exemple de "spatie laravel-analytics", remplacer dans
config/app.php
cette ligne:Spatie\Analytics\AnalyticsServiceProvider::class
avec celui-ci:
App\Providers\AnalyticsDeferredServiceProvider::class
et enfin créer les
App\Providers\AnalyticsDeferredServiceProvider
classe, avec::
De cette façon, vous pouvez avoir le fournisseur de lire la configuration des valeurs lorsque vous êtes sur le point d'instancier le service, après avoir mis tout runtime config valeurs.
D'utiliser ce contrôleur lorsque vous avez besoin de changer.
Vous pouvez faire comme ceci.
Dans votre fichier de configuration personnalisé. Ajoutez le code suivant, Vous pouvez envoyer votre id dynamiquement à partir de la chaîne de requête.
Pour obtenir l'affichage de l'id de
Depuis Laravel v5.2 vous pouvez définir dynamiquement config valeurs de cette façon:
En fait, si vous êtes de ce point de code qui vous oblige à faire la config des valeurs de dynamique, il devrait y avoir quelque chose de mal avec votre flux de code, comme l'utilisation de fichier de config est juste pour initialiser les valeurs requises - qui doit être défini avant du chargement de l'application.
Prise de config valeurs de dynamique est un les"MAUVAISES PRATIQUES" dans le monde du codage.
Donc, il y a l'alternative suivante pour votre problème.
La définition de la valeur dans .fichier env (facultatif)
De la valeur d'usage à l'intérieur du Contrôleur de
Espère que cela vous aide!