我已经对此做了很多阅读,很多人都说我应该使用单身课程。我正在考虑写一个" Config"包括" config.php"的类。文件在__construct上并循环遍历$ config数组值并将它们放入$ this->值...
但后来我越来越多地阅读了如何永远不要使用单身人士。所以我的问题是 - 对此最好的方法是什么?我希望有一个配置文件,出于组织目的,包含我所有的$ config变量。出于灵活性等原因,我不想将数据库用户名和密码等硬件直接硬编码到方法中。
例如,我在我正在处理的MVC项目中使用以下代码:
公开/ index.php的
<?php
include '../app/bootstrap.php';
?>
应用/ bootstrap.php中
<?php
session_start();
function __autoload ($class) {
$file = '../app/'.str_replace('_', '/', strtolower($class)).'.php';
if (file_exists($file)) {
include $file;
}
else {
die($file.' not found');
}
}
$router = new lib_router();
?>
应用/ LIB / router.php
<?php
class lib_router {
private $controller = 'controller_home'; // default controller
private $method = 'index'; // default method
private $params = array();
public function __construct () {
$this->getUrl()->route();
}
private function getUrl () {
if (isset($_GET['url'])) {
$url = trim($_GET['url'], '/');
$url = filter_var($url, FILTER_SANITIZE_URL);
$url = explode('/', $url);
$this->controller = isset($url[0]) ? 'controller_'.ucwords($url[0]) : $this->controller;
$this->method = isset($url[1]) ? $url[1] : $this->method;
unset($url[0], $url[1]);
$this->params = array_values($url);
}
return $this;
}
public function route () {
if (class_exists($this->controller)) {
if (method_exists($this->controller, $this->method)) {
call_user_func(array(new $this->controller, $this->method), $this->params);
}
else {
die('Method '.$this->method.' does not exist');
}
}
else {
die('Class '.$this->controller.' does not exist');
}
}
}
?>
现在让我们说访问 http://localhost/myproject/lead/test
它将调用 controller_lead 类和测试方法。
以下是 app / controller / lead
的代码<?php
class controller_lead extends controller_base {
public function test ($params) {
echo "lead test works!";
}
}
?>
应用/控制器/碱
<?php
class controller_base {
private $db;
private $model;
public function __construct () {
$this->connect()->getModel();
}
private function connect () {
//$this->db = new PDO($config['db_type'] . ':host=' . $config['db_host'] . ';dbname=' . $config['db_name']. ', $config['db_user'], $config['db_pass'], $options);
return $this;
}
private function getModel () {
$model = str_replace('controller', 'model', get_class($this));
$this->model = new $model($this->db);
}
}
?>
这是我遇到问题的地方。如您所见, connect 方法将尝试创建一个新的PDO对象。现在我将如何注入这个 $ config 变量,给出我刚刚提供的所有其他代码?
我的选项似乎是:
我还有其他选择吗?我不想做这3件事中的任何一件......
非常感谢任何帮助。
答案 0 :(得分:0)
我最终在我的引导程序中包含一个配置文件,其中只包含常量,并使用了常量。
答案 1 :(得分:0)
我最终在我的引导程序中包含一个配置文件,其中只包含常量,并使用了常量。
对我来说情况也是如此 - 需要Model
中的文件。基于文件的方法是最合适的,因为它有一些好处:您可以.gitignore
,设置自定义权限集,所有参数集中存储等。
但是,如果配置文件仅包含数据库连接参数,我建议仅在Model
中要求配置文件。也许,你也可以分解成多个更具体的配置文件,并在必要时需要它们。
public function __construct()
{
if (self::$handle === FALSE)
{
$db = array();
require APP_DIR.DIR_SEP.'system'.DIR_SEP.'config'.DIR_SEP.'Database.php';
if (!empty($db))
{
$this->connect($db['db_host'], $db['db_user'], $db['db_password'], $db['db_name']);
}
else
{
Error::throw_error('Abimo Model : No database config found');
}
}
}