cakephp: één engine voor meerdere applicaties

De uitdaging van updates

Traditioneel gezien wordt voor elke applicatie een eigen CakePHP engine geïnstalleerd. Stel dat je 10 applicaties hebt, dan moet je bij een update de nieuwe versie 10 keer installeren. Dit resulteert in 10 identieke kopieën van de CakePHP broncode, wat inefficiënt is en ruimte verspilt. Een alternatieve aanpak is het gebruik van één centrale CakePHP engine die door alle applicaties wordt gedeeld, wat de updateprocedure aanzienlijk vereenvoudigt.

De structuur van de bestanden

Stel je serverstructuur voor: ~/domains/domena1.pl/public_html/ en ~/domains/domena2.com/public_html/. Elke public_html/ bevat standaard twee CakePHP applicaties. De inhoud van deze mappen omvat app/, cake/, plugins/, vendors/, .htaccess en index.php. Om de 'één engine voor meerdere applicaties' strategie te implementeren, worden de overbodige folders verplaatst.

Verplaatsen van de cakephp-engine

De mappen cake/, plugins/ en vendors/ worden verplaatst naar een centrale locatie, bijvoorbeeld ~/cakephp_1_3_10/. De public_html/ folder behoudt nu alleen de mappen app/, .htaccess en index.php. Dit zorgt voor een overzichtelijke structuur en vermindert de hoeveelheid data per applicatie.

Aanpassen van de include paden

Om ervoor te zorgen dat de applicaties de centrale CakePHP engine kunnen vinden, moet de constante CAKE_CORE_INCLUDE_PATH in app/webroot/index.php worden aangepast. Deze constante moet verwijzen naar de directory die de cake/ en vendors/ mappen bevat. Zoek lijn 53 in index.php en pas de definitie aan naar define('CAKE_CORE_INCLUDE_PATH', dirname(dirname(dirname(ROOT))).DS.'cakephp1_3_10');.

De wijzigingen toepassen

De wijziging van CAKE_CORE_INCLUDE_PATH moet in elke applicatie handmatig worden uitgevoerd. Dit is slechts een eenmalige actie per applicatie. Hoewel dit initieel wat tijd kost, bespaart het aanzienlijk veel tijd bij toekomstige updates en onderhoud van de applicaties.

Verdere optimalisatie: de 'app' folder

Als optie kun je de inhoud van de app/ folder direct naar de public_html/ folder verplaatsen. Dit vereenvoudigt de structuur nog verder. Echter, dit vereist een diepere analyse en kan gevolgen hebben voor de applicatie-architectuur en is het onderwerp van een apart artikel. Deze aanpak is niet aanbevolen voor beginners.