SensioFrameworkExtraBundle

El FrameworkBundle predeterminado de Symfony2 implementa una plataforma MVC, básica pero robusta y flexible. SensioFrameworkExtraBundle la extiende añadiendo agradables convenciones y anotaciones. Esto permite controladores más concisos.

Instalando

Descarga el paquete y ponlo bajo el espacio de nombres Sensio\Bundle\. Luego, como con cualquier otro paquete, inclúyelo en la clase de tu núcleo:

public function registerBundles()
{
    $bundles = array(
        ...

        new Sensio\Bundle\FrameworkExtraBundle\SensioFrameworkExtraBundle(),
    );

    ...
}

Configurando

Todas las características proporcionadas por el paquete están habilitadas por omisión, cuando registras el paquete en la clase de tu núcleo.

La configuración predeterminada es la siguiente:

  • YAML
    sensio_framework_extra:
        router:  { annotations: true }
        request: { converters: true }
        view:    { annotations: true }
        cache:   { annotations: true }
    
  • XML
    <!-- xmlns:sensio-framework-extra="http://symfony.com/schema/dic/symfony_extra" -->
    <sensio-framework-extra:config>
        <router annotations="true" />
        <request converters="true" />
        <view annotations="true" />
        <cache annotations="true" />
    </sensio-framework-extra:config>
    
  • PHP
    // Carga el generador de perfiles
    $container->loadFromExtension('sensio_framework_extra', array(
        'router'  => array('annotations' => true),
        'request' => array('converters' => true),
        'view'    => array('annotations' => true),
        'cache'   => array('annotations' => true),
    ));
    

Puedes desactivar algunas anotaciones y convenciones definiendo uno o más valores en false.

Anotaciones para controladores

Las anotaciones son una buena manera de configurar controladores fácilmente, desde las rutas hasta la configuración de la caché.

Incluso si las anotaciones no son una característica natural de PHP, aún tienen varias ventajas sobre los métodos de configuración clásicos de Symfony2:

  • El código y la configuración están en el mismo lugar (la clase controlador)
  • Fáciles de aprender y usar;
  • Concisas para escribirlas;
  • Adelgazan tu controlador (puesto que su única responsabilidad es conseguir los datos del modelo).

Truco

Si utilizas las clases view, las anotaciones son una buena manera de evitar la creación de clases view para casos simples y comunes.

Las siguientes anotaciones están definidas por el paquete:

Este ejemplo muestra en acción todas las anotaciones disponibles:

use Sensio\Bundle\FrameworkExtraBundle\Configuration\Route;
use Sensio\Bundle\FrameworkExtraBundle\Configuration\Cache;
use Sensio\Bundle\FrameworkExtraBundle\Configuration\Template;
use Sensio\Bundle\FrameworkExtraBundle\Configuration\ParamConverter;
use Sensio\Bundle\FrameworkExtraBundle\Configuration\Method;

/**
 * @Route("/blog")
 * @Cache(expires="tomorrow")
 */
class AnnotController extends Controller
{
    /**
     * @Route("/")
     * @Template
     */
    public function indexAction()
    {
        $posts = ...;

        return array('posts' => $posts);
    }

    /**
     * @Route("/{id}")
     * @Method("GET")
     * @ParamConverter("post", class="SensioBlogBundle:Post")
     * @Template("SensioBlogBundle:Annot:post.html.twig", vars={"post"})
     * @Cache(smaxage="15")
     */
    public function showAction(Post $post)
    {
    }
}

En la medida en que el método showAction siga algunas convenciones, puedes omitir algunas anotaciones:

/**
 * @Route("/{id}")
 * @Cache(smaxage="15")
 */
public function showAction(Post $post)
{
}

Es necesario importar las rutas para activarlas como cualquier otro recurso de enrutado, ve Activando anotaciones de enrutado para detalles.

Bifúrcame en GitHub