Table of Contents : De handleiding

CakePHP Structuur

CakePHP bevat Controller, Model en View klassen, maar ook een aantal extra klassen en objecten die de ontwikkeling in MVC sneller en leuker maken. Componenten, Behaviors, en Helpers zijn klassen zorgen voor uitbreidings- en hergebruikmogelijkheden, zodat je snel extra functionaliteit kunt toevoegen aan standaard MVC klassen in je toepassingen. Voor nu blijven we hierover even op de oppervlakte, de details van hoe je deze tools kunt gebruiken komen we later op terug.

Controller Extensies

Een Component is een klasse die de controller logica ondersteunt. Als u bepaalde logica wilt delen met verschillende controllers controllers (of applicaties), dan is een component meestal een goede oplossing. Bijvoorbeeld met het EmailComponent in de core, is het maken en versturen van emails een fluitje van een cent. In plaats van een controller methode die deze logica uitvoert voor een enkele controller te schrijven, kun je deze logica bundelen zodat deze gedeeld kan worden.

Controllers zijn ook voorzien van callbacks. Deze callbacks zijn door u te gebruiken, voor het geval dat u bepaalde logica wilt invoegen in CakePHP’s core uitvoeringen. Beschikbare Callbacks zijn:

  • beforeFilter(), deze wordt uitgevoerd voor alle logische controller acties
  • beforeRender(), deze wordt uitgevoerd na alle controller logica, maar voordat de view gerendered wordt
  • afterFilter(), deze wordt uitgevoerd na alle controller logica, inclusief de view rendering. Het kan zijn dat er geen verschil is tussen afterRender() en afterFilter() tenzij u handmatig een render() aanroep in uw controlleractie hebt gemaakt en nog enige logica hebt toevoegd na die aanroep.

View Extensies

Een Helper is een klasse die de view logica ondersteunt. Zoals componenten gebruikt worden door verschillende controllers, zorgen helpers ervoor dat bepaalde presentatie logica toegankelijk is voor en gedeeld kunnen worden door verschillende views. Een van de core helpers, de AjaxHelper, maakt Ajax requests binnen de views een stuk makkelijker.

De meeste applicaties hebben stukken code voor de view die herhaaldelijk gebruikt worden. CakePHP faciliteert hergebruik van view code met layouts en elementen. Elke view die door een controller wordt gerendered wordt standaard binnen een layout geplaatst. Elementen worden gebruikt wanneer korte stukken content in meerdere views opnieuw gebruikt moeten worden.

Model Extensies

Op een zelfde manier werken Behaviors als een manier om gemeenschappelijke functionaliteit tussen modellen toe te voegen. Bijvoorbeeld, als u gebruikersgegevens opslaat in een boomstructuur, kunt u uw User model instellen zodat deze zich zal gedragen als een boom en u extra functionaleit verkrijgt voor het verwijderen, toevoegen en verschuiven van knooppunten in uw onderliggende boomstructuur.

Modellen worden ook ondersteund door een andere klasse genaamd DataSource. DataSources zijn een abstractie die het mogelijk maken dat modellen verschillende typen van data op een consistente wijze kunnen manipuleren. Terwijl de belangrijkste bron van gegevens in een CakePHP toepassing vaak een database is, zou u wellicht toch nog additionele DataSources willen schrijven zodat uw modellen ook RSS feeds, CSV bestanden, LDAP entries, of iCal events kunnen vertegenwoordigen. DataSources maken het mogelijk om records uit verschillende bronnen met elkaar te associeren: in plaats van te worden beperkt door SQL joins, kunnen DataSources uw LDAP model zeggen dat het verbonden is met meerdere iCal events.

Net zoals controllers, zijn modellen ook uitgerust met callbacks:

  • beforeFind()
  • afterFind()
  • beforeValidate()
  • beforeSave()
  • afterSave()
  • beforeDelete()
  • afterDelete()

De namen van deze methoden zouden beschrijvend genoeg moeten zijn om u te laten weten wat ze doen. Kijk voor de details in het hoofdstuk "Modellen".

Application Extensies

Zowel controllers, helpers en modellen hebben een parent klasse die u kunt gebruiken om applicatie-brede wijzigingen te definieren. AppController (vindbaar in /app/app_controller.php), AppHelper (vindbaar in /app/app_helper.php) en AppModel (vindbaar in /app/app_model.php) zijn een goeie plaats om methoden te plaatsen die u wilt delen tussen alle controllers, helpers of modellen.

Alhoewel ze geen klasse of een bestand zijn, spelen routes een rol in de requests naar CakePHP. Route definities vertellen CakePHP hoe URLs naar controller acties verwijzen moeten worden. Het standaard gedrag gaat ervan uit dat de URL “/controller/action/var1/var2” verwijst naar Controller::action($var1, $var2), maar u kunt routes gebruiken om URLs aan te passen en hoe ze geinterpreteerd worden door uw applicatie.

Sommige functies in een toepassing zijn het waard om als geheel in een pakket gestopt te worden. Een plugin is een pakket van modellen, controllers en views die een specifiek doel dienen dat over meerdere applicaties gebruikt kan worden. Een user management system of een eenvoudig blog zouden wellicht een goede toepassing zijn voor CakePHP plugins.