CakePOWER è distribuito come un package esterno da inserire nella cartella “vendors” di una qualunque distribuzione CakePHP.
Il primo file da modificare per garantire la corretta integrazione di CakePOWER è APP/config/bootstrap.php al quale andrà aggiunta la seguente istruzione:
### CakePOWER's bootstrapping. ##################################################################### if ( !@include( VENDORS.'power'.DS.'bootstrap.php' ) ) die( '<div align="center" style="font-family:verdana;font-size:8pt;color:#666;"><span style="color:red;font-weight:bold;display:block;font-size:20pt;margin-bottom:20px;">:-(</span>CakePOWER libraries not found.<br><a href="http://cakepower.juniorcms.com" style="color:blue;" title="Open Source CMS, CakePHP CMS">JuniorCMS.com</a></div>');
In questa istruzione viene caricato il file di inizializzazione di CakePOWER il quale predispone l'intero sistema all'utilizzo del software. In caso di errore l'intera esecuzione dello script viene terminata con un messaggio di errore.
Il secondo file da modificare per garantire la corretta integrazione di CakePOWER è APP/config/routes.php al quale andrà aggiunta la seguente istruzione:
### CakePOWER's Plugin Routing. #################################################################### if ( !@include( POWER_ROUTES ) ) die( '<div align="center" style="font-family:verdana;font-size:8pt;color:#666;"><span style="color:red;font-weight:bold;display:block;font-size:20pt;margin-bottom:20px;">:-(</span>CakePOWER routing libraries not found.<br><a href="http://cakepower.juniorcms.com" style="color:blue;" title="Open Source CMS, CakePHP CMS">JuniorCMS.com</a></div>');
Questa integrazione permette di estendere le direttive di routing CakePHP direttamente dai plugins installati nel sistema CakePOWER.
L'integrazione del framework si basa principalmente sull'estensione delle sue classi base: L'applicazione estende CakePOWER il quale a sua volta estende CakePHP proprio come illustrato dalla seguente immagine.
E' evidente che CakePOWER è uno strato software che funge da cuscinetto tra CakePHP e l'applicazione. Di fatto CakePOWER è un'estensione di CakePHP e fornisce allo sviluppatore delle funzionalità aggiuntive per lo sviluppo di applicazioni avanzate.
L'integrazione di CakePOWER avviene dunque nei file di applicazione:
<?php # CakePOWER | Caricamento classi di framework da estendere. # require_once(POWER_APP_CONTROLLER); require_once(POWER_APP_COMPONENT); require_once(POWER_APP_HELPER); class AppController extends PowerController {} ?>
<?php # CakePOWER | Caricamento classi di framework da estendere. # require_once(POWER_APP_MODEL); require_once(POWER_APP_BEHAVIOR); class AppModel extends PowerModel {} ?>
La definizione di questo file è opzionale in quanto CakePOWER è in grado di emulare la sua esistenza. Lo scopo è estendere la classe helper di CakePOWER all'interno dell'applicazione.
<?php class AppHelper extends PowerHelper {} ?>
La definizione di questo file è opzionale in quanto CakePOWER è in grado di emulare la sua esistenza. Lo scopo è estendere la classe Component di CakePOWER all'interno dell'applicazione.
<?php class AppComponent extends PowerComponent {} ?>
La definizione di questo file è opzionale in quanto CakePOWER è in grado di emulare la sua esistenza. Lo scopo è estendere la classe Behavior di CakePOWER all'interno dell'applicazione.
<?php class AppBehavior extends PowerBehavior {} ?>
Ora che hai effettuato queste semplici operazioni la tua applicazione CakePHP integra CakePOWER è può utilizzarne tutte le funzionalità.
Ho usato il condizionale in quanto CakePOWER è un layer completamente non invasivo. Non devi modificare il tuo modo di sviluppare ed, in linea di massima, tutte le applicazioni che hai sviluppato con CakePHP 1.2 sono compatibili con CakePOWER.
L'unico accorgimento necessario è nell'utilizzo della callback ”beforeFilter()”. In questo punto infatti avviene l'unica reale “invasione” di CakePOWER: ti chiedo di scrivere 1 riga di codice a tua scelta!
// AppController function beforeFilter() { parent::beforeFilter(); ... your code ... } function beforeRender() { parent::beforeRender(); ... your code ... }