我正在PHP中构建一个MVC框架,需要设置一些默认的配置变量/常量。示例配置变量将是保存日志文件的位置,是否记录查询,Doctrine设置等等。因为我希望开发人员能够以最小的忙乱创建新项目,所以这些配置变量应该具有默认值。但是,要使此框架真正有用,我需要它们能够在项目引导文件中或在控制器或模型中覆盖这些默认值。我很想使用常量,但它们不能被覆盖。我觉得必须有一个我没看到的简单解决方案(也许是设计模式?)。非常感谢任何建议,谢谢。
答案 0 :(得分:5)
在这种情况下,我可能会:
当实现课程时:
一个更复杂但可能更好的解决方案可能是:
此解决方案的优点是:
还有几点说明:
Zend_Config
和Zend_Config_Ini
可能会有所帮助;即使您不使用它们,因为您正在编写自己的框架,您可能想看一看它们的作用 - 如果我没记错的话,Zend_Config_Ini
允许在.ini文件中进行层次结构和继承< / LI>
玩得开心!
答案 1 :(得分:2)
我建议使用几个ini文件:default.ini,然后根据需要使用override.ini-s。然后只需使用parse_ini_file()
加载它们,然后合并到一个配置array_merge()
。快速而简单。
答案 2 :(得分:1)
这是我将使用的设计模式。我会创建一个简单的类来促进它:
class Configuration {
String get($key) {...}
String set($key, $value) {...}
}
初始实现都可以使用默认值进行硬编码。但是,稍后您可能会阅读服务器和/或项目特定的配置文件。它可以让您根据需要灵活添加。
(我也注意到php.ini配置似乎有你想要的行为,但我不知道你如何直接利用该系统。)
答案 3 :(得分:1)
这个问题可以有各种各样的答案。我个人的推荐是将值存储到SQLite中,并有一个单独的脚本来访问和更改这些值。其他方式继续阅读。
这非常简单,具体取决于您希望面向对象的方式以及您希望为用户制作内容的简化程度。您的安装说明可以简单地指示用户直接编辑文件。在这种情况下,您可以简单地指示用户直接编辑常量文件。
遵循此路线的大多数应用程序都通过详细信息探索实现它
<?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;
}
?>
如果您想要隐藏用户的这些详细信息,那么初始设置脚本最好会提示用户提供详细信息并写入文件(config.php,config.ini,config.xml或数据库)他们选择的设置。然后在将来编辑一个不同的脚本。很好的例子是Joomla CMS。