Door
Roy B
op 26-05-2014 16:05
gewijzigd op 26-05-2014 16:27
5.068 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>
Roy heb je al ervaring met het extenden van een class?
Je zou gewoon een BaseModel class kunnen maken die voorziet in de database connectie. Daarna extend je ieder Model van de BaseModel.
<?php
// base.model.php
class BaseModel
{
private $db; // lekker kort :p
public function __construct($database)
{
$this->db= $database;
}
}
// newsitem.model.php
class NewsitemModel extends baseModel
{
public function indexAction()
{
$newsitems = $this->db->getAll('newsitems');
//...
}
}
// blog.model.php
class BlogModel extends baseModel
{
public function indexAction()
{
$blogs = $this->db->getAll('blogs');
//...
}
}
?>
Roy B op 27/05/2014 15:29:34
@Frank Nietbelangrijk,
Kun je een voorbeeldje geven van hoe de methode load_view eruit ziet?
Waar wordt de locatie van de view meegegeven?
Dit is een héél erg eenvoudige loader. In werkelijkheid zijn er nog wel wat zaken om rekening mee te houden.
<?php
class BaseController
{
protected function loadView($name, $data);
{
extract($data);
unset($data);
Roy heb je al ervaring met het extenden van een class?
Je zou gewoon een BaseModel class kunnen maken die voorziet in de database connectie. Daarna extend je ieder Model van de BaseModel.
Nee, maar ik begin het wel te begrijpen.
Ik maak dus de verbinding met de database in mijn BaseModel? Moet ik deze dan ook iedere keer dat ik een Model gebruik de BaseModel aanroepen om een database verbinding te creëren?
Dan mijn volgende vraag:
Ik wil een database gaan koppelen, maar is dit een beetje de juiste manier?
Nee dat is het niet. Door je gegevens van de connectie hardcoded in een php bestand te zetten mis je alle flexibiliteit. Als je morgen dezelfde code wilt gaan gebruiken op een andere site (of zelfs maar test en productie omgevingen wilt hebben), dan heb je al een probleem. Configuratie gegevens horen in een configuratie bestand (ini, xml, yaml) en niet in een php script bestand.
Maak van de connectie ook een class en zorg dat je zelfs die class nog eens zou kunnen vervangen. Bijvoorbeeld als je niet van een mysql database, maar van een db2 database gebruik gaat maken, om maar iets te noemen.
[quote="Frank Nietbelangrijk op 27/05/2014 21:39:40"]
Roy heb je al ervaring met het extenden van een class?
Je zou gewoon een BaseModel class kunnen maken die voorziet in de database connectie. Daarna extend je ieder Model van de BaseModel.
Nee, maar ik begin het wel te begrijpen.
Ik maak dus de verbinding met de database in mijn BaseModel? Moet ik deze dan ook iedere keer dat ik een Model gebruik de BaseModel aanroepen om een database verbinding te creëren of roep ik deze eenmalig ergens aan?
[/quote]
Iemand nog tips?