寻找管理应用程序配置设置的想法/解决方案

Ste*_*nte 3 php configuration

我正在PHP中构建一个MVC框架,需要设置一些默认的配置变量/常量.示例配置变量将是保存日志文件的位置,是否记录查询,Doctrine设置等等.因为我希望开发人员能够以最小的忙乱创建新项目,所以这些配置变量应该具有默认值.但是,要使此框架真正有用,我需要它们能够在项目引导文件中或在控制器或模型中覆盖这些默认值.我很想使用常量,但它们不能被覆盖.我觉得必须有一个我没看到的简单解决方案(也许是设计模式?).任何建议将不胜感激,谢谢.

Pas*_*TIN 5

在这种情况下,我可能会:

  • 创建一个处理与配置相关的所有内容的类
    • 该类将包含获取/设置配置选项的方法; 无论您的应用需求如何
    • 在适当的时候,它还会定义默认值
  • 使用.ini或.xml文件,可以在其中重新定义配置值

在实现课程时:

  • 您已经拥有默认值
  • 您解析.ini或.xml文件
  • 该配置文件中定义的每个值都用于覆盖类中定义的相应默认值.


一个更复杂但可能更好的解决方案可能是:

  • 仍然具有该配置类,但不使用它来存储任何默认值
  • 有一个.ini或.xml文件来存储默认值
  • 有一个.ini或.xml文件,人们可以在其中覆盖默认值中定义的值
  • 加载包含默认值的文件,然后加载包含特定值的文件

该解决方案的优点是:

  • 没有存储在PHP类中的配置值
  • 可以覆盖的所有配置选项都已在.ini/.xml文件中定义,这意味着人们只需将一行复制/粘贴到其特定文件中即可覆盖:无需查看PHP类并思考"我该如何将其翻译成配置文件?"


还有几点说明:

  • 您可能希望使用某种缓存 - 机制,以便在每次请求时不重新解析文件
  • Zend_Config并且Zend_Config_Ini可能会有所帮助; 即使您不使用它们,因为您正在编写自己的框架,您可能想看看它们的作用 - 如果我没记错的话,Zend_Config_Ini允许在.ini文件中进行层次结构和继承

玩得开心!