PHP expert |
|
Ja, de site is nog down.
Het is niet zo 1, 2, 3 uit te leggen. Je hebt zeker een voorbeeld nodig. Misschien maak ik dat wel, maar ik maak eerst een ander project af.
Misschien kun je zelf al aan de slag. Maak een script, en post dat hier, dan zal ik zeggen of het een goed MVC script is.
Je moet deze regels volgen:
Controller
- Verwerkt alle input ($_GET, etc).
- Bij bijv. een forum slaat de controller een nieuw bericht op als iemand dat post. In de controller zelf wordt geen SQL geschreven, maar het Model doet dat:
$model->addMessage('titel', 'bericht');
Model
- Doet alle database-dingen.
- Het moet mogelijk zijn een ander database-systeem te nemen zonder dat de Controller/View veranderd hoeven te worden. Als je ipv. MySQL bijv. XML-bestanden wilt gaan gebruiken hoef je dus alleen het Model te veranderen.
- $_GET/$_POST mogen hier niet aangeroepen worden, dat gebeurt in de Controller
View
- Behandeld alle output.
- Het moet mogelijk zijn de manier van outputten te veranderen zonder dat Model/Controller veranderd hoeven te worden. Dus als je ipv. HTML nu PDF wilt weergeven, verander je alleen View.
- $_GET/$_POST mogen hier niet aangeroepen worden, dat gebeurt in de Controller
Algemeen
- Alle 3 delen (Model/View/Controller) moeten onafhankelijk van elkaar zijn. Dus veranderingen in het ene deel moeten mogelijk zijn zonder dat de andere delen aangepast hoeven te worden.
- Eerst wordt de controller gemaakt: $controller = new JeWebsiteController();
- In de constructor van de controller wordt het Modelgemaakt:
$model = new JeWebisteModel();
- Dan worden de controller taken gedaan (bijv. bericht aan DB toevoegen).
- Dan wordt View gemaakt:
$view = new JeWebsiteView();
$view->setModel($model);
$view->render();
- Voor iedere pagina is er een aparte View/Controller-class. (dus voor forum: ForumIndex/BekijkThread/BekijkCategorie/PostBericht) En voor iedere tabel in de database een Model (forum: CategorieModel, BerichtModel)
Verder werken views zo:
class BaseView
{
var $output = '';
function header()
{
$this->output .= '<html><head>...</head><body>';
}
function footer()
{
$this->output .= '</body></html>';
}
function render()
{
$this->header();
$this->content();
$this->footer();
echo $this->output;
}
}
class ForumIndexView extends BaseView
{
function content()
{
while($row = $model->next())
{
$this->output .= 'Bericht-Titel: '.$row['title'].' bericht: '.$row['bericht'];
}
}
class BaseView { var $output = ''; { $this->output .= '<html><head>...</head><body>'; } function footer() { $this->output .= '</body></html>'; } function render() { $this->header(); $this->content(); $this->footer(); } } class ForumIndexView extends BaseView { function content() { while($row = $model->next()) { $this->output .= 'Bericht-Titel: '.$row['title'].' bericht: '.$row['bericht']; } }
Ik hoop dat je het snapt, en anders vraag maar! |