Symfony 2 – Cosa c’è di nuovo? (parte 2)

I Bundle

Come accennato nell’articolo precedente, una delle grosse novità di 2 è l’introduzione dei Bundle.

I Bundle possono essere considerati come i plugin nella versione 1 del framework e per chi ha maggiore dimestichezza con il mondo JAVA, i bundle possono essere considerati come i package.
La struttura a bundle del framework symfony 2 è resa possibile dall’implementazione del concetto di NAMESPACE introdotta dalla versione 5.3 di , versione che symfony 2 richiede obbligatoriamente.

Di seguito riporto un esempio di struttura di un bundle:

Con Symfony 2 i bundle vengono attivati dal kernel dell’applicazione attraverso il modulo descritto di seguito:

use Symfony\Component\HttpKernel\Kernel;
use Symfony\Component\Config\Loader\LoaderInterface;

class AppKernel extends Kernel
{
    public function registerBundles()
    {
        $bundles = array(
            new Symfony\Bundle\FrameworkBundle\FrameworkBundle(),
            new Symfony\Bundle\TwigBundle\TwigBundle(),
            new Symfony\Bundle\ZendBundle\ZendBundle(),
            new Symfony\Bundle\SwiftmailerBundle\SwiftmailerBundle(),
            new Symfony\Bundle\DoctrineBundle\DoctrineBundle(),
            new Symfony\Bundle\AsseticBundle\AsseticBundle(),
            new Sensio\Bundle\FrameworkExtraBundle\SensioFrameworkExtraBundle(),
        );

        if (in_array($this->getEnvironment(), array('dev', 'test'))) {
            $bundles[] = new Symfony\Bundle\WebProfilerBundle\WebProfilerBundle();
            $bundles[] = new Symfony\Bundle\WebConfiguratorBundle\SymfonyWebConfiguratorBundle();
	    $bundles[] = new Makeallweb\LoginBundle\LoginBundle();
	    $bundles[] = new Makeallweb\EntitiesBundle\MakeallwebEntitiesBundle();
	    //$bundles[] = new Bundle\WebServiceBundle\WebServiceBundle();
        }

        return $bundles;
    }

    public function registerContainerConfiguration(LoaderInterface $loader)
    {
        $loader->load(__DIR__.'/config/config_'.$this->getEnvironment().'.yml');
    }

    public function registerRootDir()
    {
        return __DIR__;
    }
}

Attraverso questo modulo è possibile controllare in maniera capillare quali bundle vengono utilizzati dall’applicazione ed è possibile agire sullo stato anche dei bundle del core del framework.

Inoltre affinchè il bundle sia visibile nell’intera applicazione è nesessario registrarlo all’interno del nuovo modulo di autoloading, modulo di cui parleremo in maniera approfondita nella prossima parte dell’articolo.

Per una trattazione approfondita di come implementare un nuovo bundle all’interno di un progetto, fare riferimento alla documentazione ufficiale di symfony2.

Ogni bundle incorpora tutte le risorse necessarie a renderlo un modulo completamente autonomo: risorse web come i template grafici, i CSS e i metodi Javascript,  le risorse PHP quali i controller con le varie action che operano sui relativi template ed le varie risorse di configurazione.

All’interno del bundle troviamo anche tutta la sezione per l’implementazione dei test che sfrutta la tecnologia PHPUnit.

Grazie a questa struttura è possibile trasportare un bundle da un progetto all’altro semplicemente registrandolo nell’applicazione corrente. Dopo tale operazione sarà possibile utilizzarlo immediatamente all’interno del progetto.

 

No comments yet. You should be kind and add one!

Leave a Comment

*

Allowed tags: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>