Ik heb altijd al eens het idee gehad om een simpele website te maken.
Voor dat ik verder met mijn vraagstelling kom wil ik vast zeggen dat dat het doel van deze website maken niet de website zelf is. Het doel is door te krijgen hoe de MVC architectuur toegepast in PHP werkt.
Antwoorden als "gebruik gewoon een CMS/Framework als CakePHP of Joomla" heb ik dus niet zoveel aan
Dit leek mij namelijk wel een goede manier om de html en php code gescheiden te houden.
Nu kan ik wel een beetje programmeren maar en ik weet ook wel wat classes zijn en constructors etc maar echt OOP programmeren is voor mij nog nieuw omdat ik begonnen ben met C. Daarom wil ik graag advies en correcties waar mijn aannames niet kloppen.
Dat gezegd hebbende en een hoop te hebben gelezen heb ik nu de volgende opzet in gedachte:
Ik wil alles op een punt binnen laten komen.
Bij index.php.
Dit verwarde mij een beetje omdat ik dacht dat dit al de controller was maar uiteindelijk kreeg ik door dat index.php ook wel de "front controller" of "router" genoemd word?
Het doorsturen doe ik met mod_rewrite:
Vervolgens laad ik de juiste controller in index.php:
Ik heb in een boek gelezen dat als er alleen php code in je bestand staat het handig is om de sluit tag "?>" weg te laten. Hierdoor zou je voorkomen dat er al een spatie verstuur word en je daardoor de fout kan krijgen dat de headers al verstuurd zouden zijn. Volgens het boek was de sluittag optioneel, klopt dit en word dit vaak toegepast?
Het enige wat ik niet snap is hoe ik de controller in een class onder kan brengen. Is dit ook wel nodig want ik heb volgens mij ook voorbeelden gezien waar de controller gewoon procedureel word geprogrammeerd.
NewsController
Dit zou dan het de model en view class zijn:
Let alsjeblieft niet op kleine syntax fouten en vergeten $ tekens etc, daar gaat het mij niet om.
Nou ik heb dan nog een boel vragen waar ik geen antwoord op heb
Voor dat ik verder met mijn vraagstelling kom wil ik vast zeggen dat dat het doel van deze website maken niet de website zelf is. Het doel is door te krijgen hoe de MVC architectuur toegepast in PHP werkt.
Antwoorden als "gebruik gewoon een CMS/Framework als CakePHP of Joomla" heb ik dus niet zoveel aan
Nu kan ik wel een beetje programmeren maar en ik weet ook wel wat classes zijn en constructors etc maar echt OOP programmeren is voor mij nog nieuw omdat ik begonnen ben met C. Daarom wil ik graag advies en correcties waar mijn aannames niet kloppen.
Dat gezegd hebbende en een hoop te hebben gelezen heb ik nu de volgende opzet in gedachte:
Ik wil alles op een punt binnen laten komen.
Bij index.php.
Dit verwarde mij een beetje omdat ik dacht dat dit al de controller was maar uiteindelijk kreeg ik door dat index.php ook wel de "front controller" of "router" genoemd word?
Het doorsturen doe ik met mod_rewrite:
code:
1
2
3
4
| RewriteEngine on RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteRule ^(.*)$ index.php/$1 [L] |
Vervolgens laad ik de juiste controller in index.php:
PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
| <?php session_start(); error_reporting (E_ALL); /* Hier splits ik de aanroep url en zet alle stukken in de array 'url' */ $_SESSION['url'] = explode("/", $_SERVER['REQUEST_URI']); function __autoload($class_name) { require_once "lib/" . $class_name . ".php"; } switch($_SESSION['url'][1]) { case "news": require "lib/NewsController.php"; break; /* case "etc": require "lib/Etc.php"; break; */ default: break; } |
Ik heb in een boek gelezen dat als er alleen php code in je bestand staat het handig is om de sluit tag "?>" weg te laten. Hierdoor zou je voorkomen dat er al een spatie verstuur word en je daardoor de fout kan krijgen dat de headers al verstuurd zouden zijn. Volgens het boek was de sluittag optioneel, klopt dit en word dit vaak toegepast?
Het enige wat ik niet snap is hoe ik de controller in een class onder kan brengen. Is dit ook wel nodig want ik heb volgens mij ook voorbeelden gezien waar de controller gewoon procedureel word geprogrammeerd.
NewsController
PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
| <?php $model = new NewsModel($dataBaseObject); //Stel de paginatitel in $model->title = "paginatitel"; // Haal nieuws op uit database en sla het op in een array in het modelobject. $model->GetNews(); //Geef view toegang tot het model $view = new NewsView($model); //Geef de data uit het model weer met html $view->Header(); $view->ViewNewsTable() |
Dit zou dan het de model en view class zijn:
PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
| <?php class NewsModel extends BaseModel { var $news = NULL; var $databaseObject = NULL; function __construct(&$databaseObject) { $this->databaseObject =& $databaseObject; } function GetNews() { //sql } function DeleteNews($id) { //sql } function CreateNews() { //sql } } |
PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
| <?php class NewsView extends BaseView { // var $model staat in de basisview function __construct(&$model) { $this->model =& $model; } function Header() { echo<<<HTML //header html HTML; } function ViewNewsTable() { echo<<<HTML //html & loop over model news array HTML; } } |
Let alsjeblieft niet op kleine syntax fouten en vergeten $ tekens etc, daar gaat het mij niet om.
Nou ik heb dan nog een boel vragen waar ik geen antwoord op heb
- Wat mij in verwarring brengt is dat je in veel modellen het volgende ziet:
Controller->Model->View. Waarbij er gezegd word dat de controller het model aanpast. Dit is logisch maar geeft de controller vervolgens ook het commando aan View voor de weergave? Zoals in mijn voorbeeldcode.
Oftewel waar roep ik de View aan om aan het werk te gaan en eens wat te laten zien. - Wat als ik bijvoorbeeld in plaats van html LaTeX output wil. Dus dat ik een popup krijg met een aangeboden latex tekstbestand. Schrijf ik hier dan een aparte View class voor of prop ik dat in 1 view class waar ik voor html en latex andere methoden aanroep?
- Klopt het dat de php "?>" sluittag optioneel is en is het standaard om deze weg te laten in php only bestanden of word deze eigenlijk altijd geschreven?
- Word de controller procedureel geprogrammeerd of is ook die onder te vangen in een class.
Zo ja hoe ziet die class er ongeveer uit en wat voor methoden kan ik hier in verwachten.
Aangezien mijn index.php eigenlijk alleen doorstuurt naar een andere controller zou ik denken dat deze dan zijn eigen methodes vanuit zijn construct aan zou moeten gaan roepen.
Dit lijkt mij nogal een vreemde manier van programmeren.