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.
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(),
);
...
}
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:
sensio_framework_extra:
router: { annotations: true }
request: { converters: true }
view: { annotations: true }
cache: { annotations: true }
<!-- 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>
// 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.
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:
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.