-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 に答える