在视图中调用数据库的正确方法


Correct way to call a database into a view

我试图在我的网站的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());    

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

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

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

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

视图不应该知道数据的来源。它只会从模型层请求一些信息。

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