login  Naam:   Wachtwoord: 
Registreer je!
 Forum

[ZF] filmdatabase applicatie met classes uit "reguliere PHP" integreren in MVC van Zend frameworks

Offline Eric1978 - 14/12/2011 10:52 (laatste wijziging 14/12/2011 11:20)
Avatar van Eric1978Lid Hoi iedereen,

Ik heb even een vraag over Zend Frameworks en het integreren van een applicatie in de MVC.

Op dit moment heb ik een filmdatabase met een index.php. Hierin staan twee OOP class bestanden geinclude: Filmclass.php en acteur.php. Hierin staan al mijn public functions, INSERT, SELECT, UPDATE functies, abstracte handige dingetjes, etc.

In de index.php staat een switch statement met bijvoorbeeld de onderdelen case toevoegen/case delete /case update. Met daarin objecten aangemaakt die verwijzen naar de public functions in mijn class bestanden.

Nu ga ik het switch statement opsplitsen in de controller map van Zend framework. Ik maak dus een controllerbestand "FilmdbController.php". Hierin maak ik een class aan: class FilmdbController extends Zend_Controller_Action.

In deze controller class FilmdbController maak ik verschillende publlic functions aan. (public function indexAction, indexToevoegen, indexDelete, etc). Voor de views is er een koppeling gemaakt naar Smarty, voor het netjes verwerken van de templates. Dit is allemaal in orde.

Maar waar laat ik nu de classes (filmclass.php, en acteur.php) met alle functies erin? Deze had eerder ik in PHP zonder ZF altijd geinclude in de index.php.

Moet ik deze weer ergens in een map plaatsen en dan includen, of moet ik iets met de "models" map doen?

Ik ben erg benieuwd of iemand mij hiermee kan helpen.

Groeten Eric

8 antwoorden

Gesponsorde links
Offline Ibrahim - 14/12/2011 16:30
Avatar van Ibrahim PHP expert Een model regelt de manipulatie van objecten, meestal is dit een Database tabel. Die dingen heb je dus niet echt meer nodig, tenzij het specifieke zaken betreffen.

In een model kun je voor die specifieke zaken gewoon een method maken die je dan aanroept in je controller:

  1. <?php
  2.  
  3. $filmModel->updateFilmAndUpdateAuthor();


Ik hoop dat je begrijpt wat ik bedoel.

Voor de handige functies die je gebruikt (bijv. een filmscore berekening die je weergeeft in een view) gebruik je een helper
Offline Eric1978 - 14/12/2011 17:31 (laatste wijziging 14/12/2011 17:44)
Avatar van Eric1978 Lid Het is nog niet helemaal duidelijk. Hoe zou ik het bijvoorbeeld onderstaande stukje script uit mijn film.php in een model/contoller zetten? Bijvoorbeeld het stukje INSERT. Moet de naam van het model dan ook dezelfde naam hebben als de Action in de controller?

En wat zet ik dan ongeveer in de models map?

  1. class Film {
  2. private static $_mogelijke_beeldkwaliteiten = array("720P", "1080P","DivX", "DVD5", "DVD9");
  3. private $_gegevens;
  4.  
  5. public function __construct($id = null) {
  6. if (is_numeric($id)) {
  7.  
  8. $query = "SELECT * FROM filmdatabase WHERE id=$id";
  9. $result = mysql_query($query);
  10.  
  11. $this->initByDatabaseRow(mysql_fetch_assoc($result))
  12. }
  13. }
  14. public function initByDatabaseRow($row) {
  15. $this->_gegevens = $row;
  16. }
  17. public function initByPostData($post) {
  18. $this->_gegevens = $post;
  19. }
  20. public function getId() {
  21. return $this->_gegevens['id'];
  22. }
  23. public function setId($id) {
  24. $this->_gegevens['id'] = $id;
  25. public function getTitel() {
  26. return $this->_gegevens['titel'];
  27. }
  28. public function setTitel($titel) {
  29. $this->_gegevens['titel'] = $titel;
  30. }
  31. public function getJaar() {
  32. return $this->_gegevens['jaar'];
  33. }
  34. public function setJaar($jaar) {
  35. $this->_gegevens['jaar'] = $jaar;
  36. }
  37. public function getBeeldKwaliteit() {
  38. return $this->_gegevens['beeldkwaliteit'];
  39. }
  40. public function setBeeldKwaliteit($beeldkwaliteit) {
  41. if(in_array($beeldkwaliteit, $this->_mogelijke_beeldkwaliteiten)) {
  42. $this->_gegevens['beeldkwaliteit'] = $beeldkwaliteit;
  43. }
  44. }
  45. public function getOmschrijving() {
  46. return $this->_gegevens['omschrijving'];
  47. }
  48. public function setOmschrijving($omschrijving) {
  49. $this->_gegevens['omschrijving'] = $omschrijving;
  50. }
  51. public function getFilmtype() {
  52. return $this->_gegevens['filmtype'];
  53. }
  54. public function setFilmType($filmtype) {
  55. $this->_gegevens['filmtype'] = $filmtype;
  56. }
  57. public function getTijdsduur() {
  58. return $this->_gegevens['tijdsduur'];
  59. }
  60. public function setTijdsduur($tijdsduur) {
  61. $this->_gegevens['tijdsduur'] = $tijdsduur;
  62. }
  63. public static function getMogelijkeBeeldkwaliteiten() {
  64. return self::$_mogelijke_beeldkwaliteiten;
  65. }
  66. public function verwijderen() {
  67. if (is_numeric ($this->_gegevens['id'])) {
  68. mysql_query("DELETE FROM filmdatabase WHERE id = '{$this->_gegevens['id']}'");
  69. }
  70. }
  71. public function opslaan() {
  72.  
  73. mysql_query ("INSERT INTO filmdatabase (titel, jaar, beeldkwaliteit, omschrijving)
  74. VALUES ('{$this->_gegevens['titel']}',
  75. '{$this->_gegevens['jaar']}',
  76. '{$this->_gegevens['beeldkwaliteit']}',
  77. '{$this->_gegevens['omschrijving']}')") ;
  78. $this->_gegevens['id'] = mysql_insert_id();
  79. }
Offline Stijn - 14/12/2011 21:15
Avatar van Stijn PHP expert Hoe je het moet doen in je code, gaan we niet uitleggen. Zoek eens op de termen: MVC, ORM, DataMapping en DAO. Dat zijn dingen die voorkomen in de MVC structuur van de nieuwste Zend Framework. Je maakt een model klasse voor een film. Die heeft velden als titel, duurtijd, ...
Dan heb je een klasse met database operaties (DAO klasse). En dan heb je een datamapper klasse nodig die je model opslaat in de database of gegevens van de database teruggeeft in je model. Als dit nieuw voor je is, ga je er 1% van verstaan wat hier getypt is. Ik ken je kennis van ZF ook niet en ook niet van OOP. Misschien dat je eerst kan zeggen wat je ervaringen zijn met die twee dingen.
Offline Eric1978 - 14/12/2011 21:55 (laatste wijziging 14/12/2011 21:58)
Avatar van Eric1978 Lid Ik ga er eerst wel eens wat dieper in duiken. Het is dus niet even simpel wat code uit de class omzetten / verplaatsen 

Het Controller / View gedeelte heb ik nu aardig door met ZF. En dit werkt goed. Maar nu ik de scripts met OOP classes moet gaan omzetten loop ik tegen wat problemen aan.

Dat komt omdat ik nog nooit met het "models" gedeelte bezig ben geweest denk ik.
Offline Ibrahim - 15/12/2011 19:44
Avatar van Ibrahim PHP expert Volgens mij is hier op Sitemasters een tutorialreeks voor Zend Framework te vinden, geschreven door Stijn.

Dit is wellicht een outdated versie, maar voor het principe models zou het een uitstekende beginsel moeten zijn. Daarnaast heeft Zend op hun website een reference waar je werkelijk alles over het MVC kunt nalezen ;)
Offline Eric1978 - 16/12/2011 10:05
Avatar van Eric1978 Lid Hey, dat klopt ik heb ook geprobeerd de reeks van Stijn te downloaden, maar deel 1 was niet meer beschikbaar.

Gelukkig staan er op internet genoeg andere E-books, tuts, etc. Ik ga me er eerst maar eens op deze manier in verdiepen. Bedankt voor de tips allemaal.
Offline Stijn - 16/12/2011 23:17
Avatar van Stijn PHP expert Ik raad het boek "Werken met Zend Framework" aan. Leest makkelijk en daar leer je 70% van het framework.

Mijn tutorial reeks gaat eigenlijk niet meer op voor de nieuwste ZF. Eigenlijk zou die weg moeten.
Offline MiST - 17/12/2011 00:53
Avatar van MiST Lid Ik weet niet of dit nog billijk is. ZF2 is in aantocht en gaat enkele grote MVC breuken introduceren. Ik volg alle development van ZF2 nauwgezet op en ben dus bezig met de "cutting-edge" features van ZF2.

Wat ik WEL aanraad, is de tutorial van Rob Allen (akrabat.com), een contributor tot het ZF. Deze is zeer gekend in de ZF community en legt de concepten van MVC zeer goed uit in de ZF-omgeving.

Ik zou aanraden de tutorial voor ZF1 door te nemen om je vertrouwd te maken met de concepten. Daarna kan je zijn tutorial voor ZF2 volgen als je mee op de kar van de evolutie wil springen.

Wat ik alleszins wel al kan zeggen is dat ZF1 weldra deprecated zal worden. Het heeft mijns inziens dus niet veel zin om bij ZF1 te blijven. Vooral omdat dit over de jaren heen een zwaar framework geworden is en meer sites trager maakt dan snel. ZF2 is the way to go.
Gesponsorde links
Je moet ingelogd zijn om een reactie te kunnen posten.
Actieve forumberichten
© 2002-2024 Sitemasters.be - Regels - Laadtijd: 0.206s