Door
Roy B
op 26-05-2014 16:05
gewijzigd op 26-05-2014 16:27
5.069 views
Kan iemand een voorbeeldje geven van een simpel begin met MVC?
Ik heb al vele tutorials bekeken, maar kom er niet helemaal uit hoe te beginnen.
Ik wil een nieuwssysteem maken.
<?php
// newsitem.controller.php
class NewsitemController
{
private $_model;
public function __construct($model)
{
$this->_model = $model;
}
public function create($id)
{
$this->_model->create($id);
}
public functin getAll()
{
$this->_model->getAll();
}
}
// newsitem.model.php
class NewsitemModel
{
private $_database;
public function __construct($database)
{
$this->_database = $database;
}
public function create($data)
{
}
public function getAll()
{
// hier komt de database actie..
}
}
// index.php
$model = new NewsitemModel($database);
$controller = new NewsitemController($model);
$controller->create($_GET["id"]);
?>
// newsitem.html
<h1><?php echo $title; ?></h1>
<p><?php echo $message; ?></p>
$this->loadview('latest_news' , $data);
}
}
?>
model - newsModel.php
<?php
Class NewsModel extends BaseModel
{
public function latest()
{
return $this->db->query("SELECT * FROM newsitems ORDER BY created DESC LIMIT 10");
}
}
?>
Die laadt de view inderdaad (denk aan include 'latest_news.php';).Maar eerst gaat de functie loadview() de $data dat een array is omzetten naar gewone variabelen.
$data['title'] wordt dan $title. Hiervoor wordt de PHP functie extract() gebruikt:
Oke duidelijk!
Ik maakte voorheen gebruik van DataMappers en haalde in mijn template de variable op met $newsitem->getTitle().
Dit is nu niet meer toepasselijk lijkt mij aangezien alle data nu direct wordt meegegeven aan de view?
@Frank Nietbelangrijk,
Kun je een voorbeeldje geven van hoe de methode load_view eruit ziet?
Waar wordt de locatie van de view meegegeven?
Ik maakte voorheen gebruik van DataMappers en haalde in mijn template de variable op met $newsitem->getTitle().
Dit is nu niet meer toepasselijk lijkt mij aangezien alle data nu direct wordt meegegeven aan de view?
Jawel, je kunt nog steeds data mappers gebruiken, maar je koppelt dan de controller (C) aan de mapper, niet de view (V). Je mappers worden zo een deel van het model (M) en, beter nog, het enige deel van het model dat zichtbaar is voor controllers.
Jawel, je kunt nog steeds data mappers gebruiken, maar je koppelt dan de controller (C) aan de mapper, niet de view (V). Je mappers worden zo een deel van het model (M) en, beter nog, het enige deel van het model dat zichtbaar is voor controllers.
Kun je hier een voorbeeldje van geven? Ik begrijp niet helemaal wat je bedoelt.
Je kunt mappers zien als de interfaces van het model. Bijvoorbeeld je class User (een controller) communiceert niet rechtstreeks met de database, maar uitsluitend via een class UserMapper. Je model (M) in de MVC-opzet wordt dan een ui waarvan alleen de buitenste schil, de mappers, toegankelijk is voor controllers.
class User <-> class UserMapper <-> class DataAccessObject <-> Database