E’ già da un paio di mesi che mi sono interessato a seagull.
Si tratta di un framework basato sul pattern Model View Controller e permette di gestire in modo molto elegante concetti come: fitrare le richieste, costruzione dei dati di input sulla richiesta, passaggio dei dati di input alla “azione” del “manager” richiesto e quindi costruzione dei dati di output che vengono passati a un template.
Ecco un esempio di una classe “manager”:
class HelloWorldMgr extends SGL_Manager
{
function validate($req, &$input){
$this->validated = true;
$input->action = ($req->get('action')) ? $req->get('action') : 'sayGoodBye';
}
function HelloWorldMgr(){
parent::SGL_Manager();
$this->_aActionsMapping = array(
'sayGoodBye' => array('sayGoodBye'),
'sayHello' => array('sayHello'),
);
}
function display(&$output) {
$this->masterTemplate = 'helloWorld.html';
$this->pageTitle = "whoa";
$output->fooz="include_path:".ini_get("include_path");
}
function _cmd_sayHello(&$input, &$output) {
$output->word = 'Hello';
}
function _cmd_sayGoodBye(&$input, &$output) {
$output->word = 'Goodbye';
}
}
In sostanza la richiesta $reqviene mandata al metodo validate() che costruisce array $input.
Successivamente il framework analizza l’array $this->_aActionsMapping per capire quali metodi (con prefisso _cmd_) sono mappati all’azione richiesta.
Successivamente vengono eseguiti tutti i metodi mappati dando come argomenti l’array di input e quello di output (per riferimento, dato che i dati devono essere modificati).
L’array associativo di output contiene tutte le etichette che verranno macro-espanse nel template (che può essere di tipo flexy, smarty e altri ancora…).
Tale array di output viene passato infine al metodo display (una specie di post-filtro) che si occupa di effettuare le ultime operazioni sui dati che verranno visualizzati, come ad esempio settare il nome del file del template.
Inoltre è disponibile un sistema evoluto di gestione dei permessi, molti moduli gia’ fatti pronti per essere utilizzati e un interfaccia web molto comoda per la configurazione del framework e dei moduli.
Questo sistema di gestire le richieste è una vera e propria manna dal cielo e per le sue caratteristiche lo utilizzerò intensivamente nei mei progetti futuri e seguiranno molti post a proposito