-1

我正在尝试在database.phtml我的网站页面上显示数据库。这个页面是一个视图。

到目前为止,我有一个名为 DatabaseConect.php 的模型

<?php

abstract class DatabaseConect {

protected $db = NULL;

public function __construct (PDO $db) {
    $this->db = $db;
}
}

class Database extends DatabaseConect {

public $props = array ();

private function getPage ($id) {
    $q = $this->db->prepare('SELECT * FROM retrofootball_products');
    $ret = $res->fetchAll();
    return ($this->props=$ret);
}

}

$db = new PDO('mysql:host=helios.csesalford.com;dbname=pd12', 'helloworld', 'password'); //I have changed the log in details 

那么在我看来

<?php require('template/header.phtml') ?>

<?php 
$page = new Database ($db);
?>

<?php require('template/footer.phtml') ?>

我一直在尝试在 Stackoverflow 上查找内容,并且遇到过这些文章,但由于我是新手,所以它们对我来说有点过头了:

在 MVC 应用程序中从模型正确调用数据库? http://programmers.stackexchange.com/questions/178831/using-pdo-with-mvc

我的问题是使用 MVC 连接到数据库然后在视图中显示它的最佳方式是什么?我是否需要PDO::FETCH在模型中使用将结果显示到变量中,然后在视图中调用该变量?

编辑:就像建议我在控制器中使用了引导程序。我是否需要在我的视图中创建一个新的实例才能让它工作?另外我在哪里在正确的地方运行查询?

<?php

class Dependency_Manager {

private $db;

public function __construct($settings) {
    $this->db = new PDO('mysql:host=helios.csesalford.com;dbname=helloworld', 'password',   'php54');
}

public function getDB() {
    return $db;
    }
}

class CMS {
public function __construct(PDO $db) {
    //$stmt = $db->query('SELECT * FROM retrofootball_products');
    }
}

$settings = array();

$dm = new Dependency_Manager($settings);
$cms = new CMS($dm->getDB());    
4

1 回答 1

1

仅供参考:视图不是模板。在正确实现的 MVC 中,视图是负责所有 UI 逻辑的实例(如由类构成的对象)。为了实现它,他们经常使用多个模板。

关于 DB 连接(以及与任何其他形式的存储交互)的令人困惑的部分是它仅在非常低级别的结构中需要 -数据映射器 书籍章节

连接本身应该通过工厂提供给每个数据映射器(需要它,因为并非所有映射器都可以与 SQL 数据库一起使用)实例。这里的代码示例- 相关部分是StructureFactory类定义。

创建数据映射器的工厂将注入一个需要使用映射器的实例。否则将违反LoD

视图不应该对数据的来源有任何想法。它只会从模型层请求一些信息。

PS: 这个古老的答案已经过时了。它包含了我 18 个月前对 MVC 的理解。我很快就会得到更新。你会发现这个答案是最新的。

于 2013-01-03T09:02:01.463 回答