Silex PHP micro-framework

Written by on dicembre 3, 2011 in Applicazioni, PHP, Tests - No comments

Silex è un micro-framework scritto da Fabien Potencier, credo sull’onda di SinatraRB ma potrei sbagliare. L’obbiettivo di Silex è la semplicità con molte funzionalità avanzate che lo rendono flessibile ed adattabile a tantissime occasioni di svilupppo.

Silex è traghettato agli sviluppatori, oltre che come codice sorgente, come pacchetto Phar, il nuovo gestore pacchetti di PHP, credo ispirato ai JAR (ma potrei sbagliarmi anche qui).

Il funzionamento base di Silex ruota intorno alle closures PHP introdotte nelle versioni di PHP 5.3 insieme ai namespaces. Un esempio introduttivo è veramente semplice ed include già una potenza e flessibilità incredibile…

<?php
require_once __DIR__.'/silex.phar';

$app = new Silex\Application();

$app->get('/hello/{name}', <strong>function ($name) use ($app) { return 'Hello '.$app->escape($name); }</strong>);

$app->run();

Dopo aver caricato il pacchetto viene creata l’applicazione e tramite il router viene insegnato all’applicazione che esiste una “strada” di nome “hello” che ha un parametro di nome “name” che viene gestito nella closure evidenziata.

Se proviamo a chiamare la strada indicata vedremo una pagina web composta semplicemente da “Hello” con un nome indicato nel parametro, quindi se chiamo “/hello/walter”  vedremo in uscita “Hello walter”. Esempio semplice ma già carico di significati e interessanti proprietà.

Le funzionalità sono veramente tante per Silex, come l’aggiunta di Twig come gestore template e altri providers per la gestione databases e tanto tanto altro come  una gestione in controllers per avvicinarsi ad un pattern MVC completo.

Vediamo ora un esempio più complicato di utilizzo di Silex con Twig ed un provider per incapsulare delle sezioni.

<?php
require_once __DIR__.'/silex.phar';

$app = new Silex\Application();

error_reporting(E_ALL);
ini_set('display_errors', 'On');

$app->register(new Silex\Provider\TwigServiceProvider(), array(
    'twig.path'       => __DIR__.'/views',
    'twig.class_path' => __DIR__.'/vendor/twig/lib',
));

$app->get('/', function(){echo "Hello";});

$app['autoloader']->registerNamespace('Wdm', __DIR__);
$app->mount('/blog', new Wdm\HelloControllerProvider());

$app->get('/hello/{name}', function ($name) use ($app) {
    return $app['twig']->render('hello.twig', array(
        'name' => $name,
        'other' => array('eg' => 'walter-eg')
    ));
});

$app->run();

Vediamo che la direttiva “register” aggiunge un nuovo Service Provider, in questo caso Twig per la gestione dei templates. Successivamente viene introdotta l’HelloControllerProvider per la gestione della sezione chiamata “blog”.

Il Controller Provider è molto semplice e ne vediamo subito il contenuto

<?php
namespace Wdm;

use Silex\Application;
use Silex\ControllerProviderInterface;
use Silex\ControllerCollection;

class HelloControllerProvider implements ControllerProviderInterface
{
    public function connect(Application $app)
    {
        $controllers = new ControllerCollection();

        $controllers->get('/', function (Application $app) {
            return $app->redirect('/hello/wally');
        });
        $app->get('/blog/{name}', function ($name) use ($app) {
            return $app['twig']->render("blog/" . $name . '.twig', array(
                'name' => $name,
                'other' => array('eg' => 'walter-eg')
            ));
        });

        return $controllers;
    }
}

Silex è veramente flessibile e molto interessante, spero di poterlo introdurre presto nell’ambito dei progetti che incontro sulla strada…

About the author

Sono, Walter Dal Mut, un consulente che opera nel mondo dell'IT come freelance in Torino e provincia. Il mio mondo informatico/elettronico ruota intorno a quatto tecnologie essenziali che sono Zend Framework per lo sviluppo di Applicazioni Web, Eclipse Framework per lo sviluppo di Applicazioni Desktop, Android Platform e iOS Apple per lo sviluppo di applicazioni mobile.

Comments are closed.

Categorie