2010-08-02 41 views
2

当使用数据库处理程序而不是单例的依赖注入 - 在哪里最好保留配置I.e.用户名密码主机等。保持在类内,使用容器类或使用静态配置类或使用文件?依赖注入类 - 在哪里存储配置

回答

3

我通常将它们保存在webroot之外的文件中。返回的数组

2

外部配置文件是一个快速的解决方案:

的config.php:

<?php 
return array(
    'database'=> array(
    'host'=> 'localhost', 
    'dbname'=> 'name_of_db', 
    'username'=> 'myusername', 
    'password'=> 'mypassword', 
    ), 
); 

test.php的:

<?php 
$config = include('config.php'); 
mysql_connect($config['database']['host'], $config['database']['username'], $config['database']['password']); 
.... 

理想情况下,存储在配置文件中目录可以被匿名网页用户读取(但不能写入)。

+0

我刚刚遇到这个答案,不得不说,谢谢你指出你可以做到这一点!我不知道你可以从包含的文件中返回值。这对于配置来说非常完美,而且正是我为我开始的一个项目所做的。 – Compeek 2012-01-05 04:21:35

0

这很难得到'正确',因为它取决于确切的用例。但是,当我遇到类似的问题时,我就是这么做的。

我为少数网站设置了共享库系统。最初,它只提供了一个数据库处理程序,但很快就添加了一个ORM层。之后的大部分增长都是额外的对象,因为其中一个网站被从直接SQL重写为基于对象的访问。还有一个配置库,用于定义共享库中的对象和其他元素如何一起收集到“模块”以及数据库设置等默认设置中。它还支持在代码树之外加载用于每个​​主机设置的配置文件。

由于ORM层中的对象必须自己进行配置(在声明时有一个静态调用来执行此操作),所以扩展它以按名称请求特定数据库也是微不足道的。然后,确保所有这些数据库定义都被声明(并且由于通用配置机制而被覆盖)是一个问题。

(过了一段时间,但是当我们没有达到其分裂数据库的角度来看,这是非常容易点相关的对象到另一个数据库,一切都只是不停地工作。)

要回答但是,您的问题是:配置被拆分。数据库主机名,用户名和密码都是在代码配置区中的一个地方命名和定义的。但是他们可以在每个主机的基础上被覆盖。每个对象设置是对象声明的位置。这也是数据库配置按名称指定的地方。