Je construis un framework MVC en PHP qui devra définir un certain nombre de variables/constantes de configuration par défaut. Exemple de config vars serait où enregistrer les fichiers journaux, que ce soit pour enregistrer les requêtes, les paramètres de Doctrine, parmi beaucoup d'autres. Parce que je veux que les développeurs puissent créer de nouveaux projets avec un minimum d'agitation, ces variables de configuration doivent avoir des valeurs par défaut. Cependant, pour que ce framework soit vraiment utile, j'ai besoin qu'ils soient capables de remplacer ces valeurs par défaut soit dans un fichier bootstrap de projet, soit à partir d'un contrôleur ou d'un modèle. J'aimerais utiliser des constantes, mais elles ne peuvent pas être écrasées. Je me sens comme s'il devait y avoir une solution simple que je ne vois tout simplement pas (peut-être un motif de conception?). Tout conseil serait grandement apprécié, merci.Recherche d'idées/solutions pour gérer les paramètres de configuration des applications
Répondre
Dans une telle situation, je serais probablement:
- Créer une classe qui traitent de tout liés à la configuration
- cette classe contiendrait des méthodes pour obtenir/définir des options de configurations; quelle que soit votre application a besoin
- Il serait également définir des valeurs par défaut, lorsque approprié
- Utilisez un fichier .ini ou .xml, dans lequel les valeurs de configuration peuvent être redéfinis
Lorsque instancier la classe :
- Vous avez déjà les valeurs par défaut
- Vous parser le fichier .ini ou .xml
- Chaque valeur définie dans ce fichier de configuration est utilisée pour remplacer la valeur par défaut correspondante définie dans la classe.
Une solution un peu plus complexe, mais peut-être mieux, peut-être à:
- ont encore cette classe de configuration, mais pas l'utiliser pour stocker des valeurs par défaut
- avoir un. Fichier ini ou .xml pour stocker les valeurs par défaut
- Avoir un .ini ou.fichier xml dans lequel les gens peuvent passer outre les valeurs définies dans la valeur par défaut d'un
- Chargez le fichier contenant les valeurs par défaut, puis celui contenant ceux spécifiques
Les avantages de cette solution sont:
- Aucune valeur de configuration stockée dans une classe PHP
- Toutes les options de configuration pouvant être remplacées sont déjà définies dans un fichier .ini/.xml, ce qui signifie que les utilisateurs doivent simplement copier/coller une ligne dans leur fichier spécifique pour la remplacer: non besoin d'aller jeter un oeil à la classe PHP et penser "comment est-ce que je traduis ceci en un fichier de configuration?"
Quelques notes plus:
- Vous pouvez utiliser une sorte de mise en cache mécanisme, de ne pas ré-analyser les fichiers à chaque demande
Zend_Config
etZend_Config_Ini
pourrait être utile ; même si vous ne l'utilisez ceux-ci, comme vous écrivez votre propre cadre, vous voudrez peut-être jeter un oeil à ce qu'ils font - Si je me souviens bien,Zend_Config_Ini
permet la hiérarchie et l'héritage dans les fichiers .ini
Amusez-vous!
Voici le motif de conception que j'utiliserais. Je voudrais créer une classe simple pour le faciliter:
class Configuration {
String get($key) {...}
String set($key, $value) {...}
}
La mise en œuvre initiale pourrait tous être codée en dur avec des valeurs par défaut. Plus tard, cependant, vous pourriez glisser dans la lecture d'un serveur et/ou un fichier de configuration spécifique au projet. Cela vous donnerait la flexibilité d'ajouter au besoin.
(J'ai aussi remarqué que les configurations de php.ini semblent avoir le comportement que vous voulez, mais je ne vois pas comment vous tirer parti de ce système directement.)
ne devrait pas être 'void set (...)' ou vous renvoyez l'ancienne valeur? – nickf
Je suggérerais d'utiliser plusieurs fichiers ini: un fichier default.ini, puis autant de fichiers override.ini-s que nécessaire. Il suffit ensuite de les charger avec parse_ini_file()
et de fusionner en une configuration avec array_merge()
. Rapide et simple.
Cette question peut venir avec une grande variété de réponses. Ma recommandation personnelle serait de stocker des valeurs dans SQLite et avoir un script séparé pour accéder et modifier ces valeurs. Pour l'autre façon continuer à lire. C'est assez simple en fonction de l'orientation de l'objet que vous souhaitez et de la simplicité avec laquelle vous voulez créer des choses pour vos utilisateurs. Vos instructions d'installation pourraient simplement indiquer aux utilisateurs de modifier un fichier directement. Dans ce cas, vous pouvez simplement demander aux utilisateurs de modifier directement un fichier de constantes.
La plupart des applications qui suivent cette voie la mettre en œuvre avec des détails explination
<?php
/**
* Global application configuration
*/
class AWConfig {
/**
* true or false
* If the is set to true debug messages will be added to the application logs
*/
public $DEBUG_MODE = true;
/**
* Path to Station database
* ex (/homepages/26/3/htdocs/databases/stations.db)
*/
public $DB_STATION = '/homepages/26/3/htdocs/databases/stations.db';
/**
* Path to logs database
* ex (/homepages/26/3/htdocs/databases/stations.db)
*/
public $DB_LOGS = '/homepages/26/d175338743/htdocs/weather/dev/metrics/beta2/databases/metriclogs.db';
/**** DO NOT EDIT BELOW THIS LINE *****/
public $LIST_STATION_LIMIT = 10;
public $MAX_COMPARE = 6;
}
?>
Si vous souhaitez masquer ces détails de l'utilisateur qu'un script de configuration initiale serait le mieux qui demande à l'utilisateur pour plus de détails et écrire un fichier (config.php, config.ini, config.xml ou vers une base de données) les paramètres qu'ils ont choisis. Ensuite, un script différent à éditer dans le futur. Un bon exemple serait Joomla CMS.
- 1. Comment partager les paramètres de configuration entre plusieurs applications
- 2. Gérer les fichiers de configuration avec WiX
- 3. Configuration personnalisée pour les applications JBoss?
- 4. Configuration des applications cygwin autonomes
- 5. Automatisation des paramètres de configuration de Firefox
- 6. Paramètres de construction XCode pour les performances - Applications iPhone
- 7. Créez-vous des classes pour gérer les "entités" des applications pilotées par les données?
- 8. Paramètres d'un fichier de configuration pour InstallShield
- 9. Python - options de configuration, comment saisir/gérer?
- 10. Quelle est la meilleure façon de gérer les paramètres (configuration) dans ASP.NET 2.0?
- 11. Comment gérer protect_from_forgery pour faire communiquer les applications Rails?
- 12. applications où les paramètres Distribuer de configuration sont chiffrées à l'aide bibliothèque Entrerprise
- 13. Meilleure approche pour la configuration de plusieurs applications .Net
- 14. ASP.NET MVC - Comment gérer les paramètres globaux de l'application
- 15. Comment gérer les paramètres optionnels dans Moose?
- 16. Flex: Transmettre des paramètres à plusieurs applications
- 17. ASP.Net MVC - gérer les mauvais paramètres d'URL
- 18. script php paramètres de configuration
- 19. Règle pour gérer les caractères UTF-8 dans les cookies pour les applications CGI?
- 20. Comment gérer correctement les applications Web Tomcat dans Eclipse?
- 21. C# fil de sécurité des paramètres de configuration globale
- 22. Configurer l'unité avec un fichier de configuration pour plusieurs applications
- 23. Visual Studio 2008, un moyen facile de gérer les paramètres?
- 24. Comment faire un moteur de recherche pour mes applications
- 25. Paramètres de configuration de la réplication IIS7
- 26. Fichiers de configuration contenant des paramètres spécifiques à l'environnement
- 27. Restriction des paramètres de configuration du plugin Java maven
- 28. Comment stocker les paramètres de configuration dans SVN?
- 29. MOSS 2007 Erreur SSL lors de la configuration Paramètres de recherche
- 30. (.net) Paramètres de configuration question de base
Merci pour la bonne réponse! J'ai une question de suivi pour vous: pourriez-vous fournir un peu plus d'informations sur les mécanismes de mise en cache possibles? Je ne veux certainement pas gaspiller de ressources en ré-analysant les fichiers. –
Salut. Vous êtes les bienvenus :-) A propos de la mise en cache: la première règle est que vous ne devriez pas vous en préoccuper en ce moment; attendez que votre application fonctionne. Ensuite, si cela est nécessaire, vous pouvez stocker les données de configuration analysées soit dans un fichier, soit dans la mémoire (avec APC ou memcache, par exemple); rappelez-vous juste que vous devrez vérifier si le fichier de configuration a été modifié, pour savoir quand invalider le cache, afin que les modifications soient prises en compte. pour un peu plus d'infos, vous pouvez lire l'introduction de http://framework.zend.com/manual/fr/zend.cache.frontends.html#zend.cache.frontends.fichier (même si vous n'utilisez pas ZF) –