login  Naam:   Wachtwoord: 
Registreer je!
 Forum

MVC Voorbeeld

Offline ikkedikke - 02/10/2007 17:27
Avatar van ikkedikkePHP expert Hallo allemaal,
om wat meer vat te krijgen op het MVC-patern zoek ik een systeem geschreven in dat patern.
Bijvoorbeeld een gastenboek.
Iemand die weet waar ik zo'n script kan vinden?

14 antwoorden

Gesponsorde links
Offline Rens - 02/10/2007 17:28
Avatar van Rens Gouden medaille

Crew algemeen
Zend Framework... 
Offline ikkedikke - 02/10/2007 17:33
Avatar van ikkedikke PHP expert ja en daar dus een geimplementeerde vorm van...;-)
Offline cloudstrife - 02/10/2007 17:40
Avatar van cloudstrife PHP beginner http://paperbag...d-php.html

Dit is een wel heel simpel voorbeeld, gewoon om het principe te snappen. Een gastenboek is nu nog vrij simpel te schrijven maar bij een iets wat grotere applicatie is het toch aan te raden om een MVC framework te gaan gebruiken zoals ZEND of cakePHP.

Voor een gastenboek kan je een model gastenboek maken met daarin de functies bv bericht toevoegen, berichten tonen

De controller ervan gaat dan de post/get verwerken en met die waarden de juiste functies aanroepen dus bv $gastenboek->getAllMessages() waarin die functie dan een array returned met daarin alle berichten of zo...

De view geeft het geheel dan gewoon terug.

Wil je MVC 100% snappen probeer het dan zelf uit te zoeken en te implementeren want de tutorial van bv hier op sitemasters is al te uitgebreidt om het basis-principe van MVC goed te snappen.
Offline Stijn - 02/10/2007 17:57
Avatar van Stijn PHP expert http://www.mindios.com/portfolio (zie mijn lessen over Zend Framework voor de code). Dit is iets wat werkt op MVC.
Offline Grayen - 02/10/2007 19:15
Avatar van Grayen PHP ver gevorderde @stijn

Ik was nieuwsgierig hoe jouw portfolio eruit zag, maar na op de link te klikken krijg ik de volgende melding:

Citaat:
Bad Request
Your browser sent a request that this server could not understand.

Additionally, a 404 Not Found error was encountered while trying to use an ErrorDocument to handle the request.
Apache/1.3.37 Server at www.mindios.com Port 80
Offline Rens - 02/10/2007 19:16
Avatar van Rens Gouden medaille

Crew algemeen
Moet nog een / achter 
http://www.mindios.org/portfolio/
Offline marten - 02/10/2007 19:44
Avatar van marten Beheerder www.polisgarant.nl

www.autitalent.nl

beide in mvc geschreven.
Offline nemesiskoen - 02/10/2007 22:02 (laatste wijziging 02/10/2007 22:03)
Avatar van nemesiskoen Gouden medaille

PHP expert
Hoe meer je met MVC werkt, hoe meer je het gaat begrijpen. Ook al lees je er tientallen artikelen over, zonder praktijk ga je er geen vat op krijgen. Voorbeelden zijn inderdaad handig, maar dan heb je wel het nadeel dat je andere mensen hun programmeermethodes misschien gaat verwarren voor iets wat MVC zou kunnen zijn. Er bestaat ook geen vaste regel hoe MVC eruit moet zien, sommige elementen zwemmen ook tussen de controller en het model, en zelfs tussen de view. Sommigen zeggen dat de view de model niet mag aanraken en anderen denk hier anders over. Dit moet je natuurlijk voor jezelf bepalen hoe streng je gaat zijn.

Een gastenboek eenvoudig voorgesteld (om MVC te proberen te begrijpen) zou er zo uit zien (aub: let niet op de syntaxis, want het gaat niet om het begrijpen van de keywoorden maar om het begrijpen van het idee, ik gebruik ook geen namespaces in dit geval omdat dit enkel verwarring strooit en los staat van MVC):
  1. Model:
  2. <?php
  3. class Gastenboek extends Model {
  4. // ga er van uit dat Model functies bevat om op te slaan:
  5. // save($arrayMetElementenVanTabel)
  6. // ga er van uit dat Model functies bevat om te verwijderen:
  7. // delete();
  8. // ga er van uit dat Model functies bevat om toe te voegen
  9. // ::add();
  10. // ga er van uit dat Model functies bevat om op te roepen
  11. // ::getAll();
  12.  
  13. // en nu goed het verschil zien tussen statische aanroep en instantieaanroep
  14. protected $_table = "gastenboek";
  15. }
  16. ?>
  17. Controller:
  18. <?php
  19. class GastenboekController extends Controller {
  20. $_uses = array('gastenboek'); // gebruikt model gastenboek
  21. public function view() {
  22. $items = Gastenboek::getAll();
  23. $this->tpl->add('items', $items);
  24. }
  25.  
  26. // ... etc
  27. }
  28. ?>
  29. View:
  30. <?php
  31. foreach($this->items as $item) {
  32. echo $item;
  33. }
  34. ?>


Dit is natuurlijk pure basic, en je kan dit zo zot maken als je wilt. Lemon (en ik voor een deel, maar de grote eer gaat Lemon toe) hebben een modelsysteem ontworpen waarbij er zoveel uit wordt gehaald dat ik er zelf soms verbaasd van ben. Het nadeel is dat het iets te complex is. Maar eens je het begrijpt, gecombineerd met een heel eenvoudige view en controller... je hebt geen idee hoe snel je applicaties klaar zijn. Het grootste probleem is gewoon het opzetten van het framework, en dan vliegen je applicaties uit je vingers voor je het weet.


PS: eigenlijk best wel vies hoe, na maanden geen PHP te hebben geprogrameerd, enkele regels PHP me weer helemaal zot maken:s
Offline zointer - 03/10/2007 08:26
Avatar van zointer HTML gevorderde
Rens schreef:
Moet nog een / achter 
http://www.mindios.org/portfolio/


Ja en .org moet zijn .com hé Rens 
Offline marten - 03/10/2007 08:34
Avatar van marten Beheerder
Citaat:
je hebt geen idee hoe snel je applicaties klaar zijn. Het grootste probleem is gewoon het opzetten van het framework, en dan vliegen je applicaties uit je vingers voor je het weet.


Inderdaad, binnen 2 dagen complete website klaar met cms erachter.
Offline ikkedikke - 03/10/2007 14:53
Avatar van ikkedikke PHP expert Vage:
Wat moet ik me dan bij een klasse als model voorstellen?
Ik neem aan dat je naast databasemodellen ook andere modellen kan hebben? (sessies?)
Offline Stijn - 03/10/2007 14:57
Avatar van Stijn PHP expert De model doet eigenlijk de data verwerking (ophalen, sturen naar controller, ontvangen van controller, opslaan).

Sessies zijn niet echt een onderdeel van model. Databases, xml, files,... zijn wel models.
Offline ikkedikke - 03/10/2007 15:04
Avatar van ikkedikke PHP expert ja ok, maar dan zou je in dit geval dus een standaard model maken, een db_model maken die de normale model uitbreidt, en dan op grond van een db_model dat model maken dat vage gebruikte voor de tabel?
Offline marten - 03/10/2007 16:55
Avatar van marten Beheerder Ik heb 1 db_model. Daar extend ik een model per database tabel op. Dus 1 class / model met insert, update en dat soort functies. En nog een waar ik een data model in heb.
Gesponsorde links
Dit onderwerp is gesloten.
Actieve forumberichten
© 2002-2024 Sitemasters.be - Regels - Laadtijd: 0.199s