我正在尝试在我网站的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上找到这些东西,并且遇到过这些文章,但是由于我不熟悉这些文章,所以它们不在我的头上:
Properly calling the database from Model in an MVC application? 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());
答案 0 :(得分:1)
FYI:视图不是模板。在正确实现的MVC中,视图是负责所有UI逻辑的实例(如在 - 由类创建的对象中)。为实现这一目标,他们经常处理多个模板。
关于数据库连接(以及与任何其他存储形式的交互)的令人困惑的部分是仅在非常低级别的结构中需要它 - data mappers {{3 }}
连接本身应该通过工厂提供给每个数据映射器(需要它,因为并非所有映射器都可以与SQL数据库一起使用)实例。代码示例book chapter - 相关部分是StructureFactory
类定义。
创建数据映射器的工厂将注入一个需要使用映射器的实例。否则将违反here。
该视图不应该对数据的来源有所了解。它只会从模型层请求一些信息。
P.S。: LoD古老的答案已经过时了。它包含了我在18个月前对MVC的理解。我很快就会得到更新。您会发现this更新。