Table of Contents
Questions & Feedback
Found a typo or an error?
Want to improve this document? Edit it.
Need support or have a technical question?
Post to the user mailing-list.
Master Symfony2 fundamentals
Symfony hosting done right
Discover the SensioLabs Support
SensioFrameworkExtraBundle
SensioFrameworkExtraBundle¶
The default Symfony2 FrameworkBundle implements a basic but robust and
flexible MVC framework. SensioFrameworkExtraBundle extends it to add sweet
conventions and annotations. It allows for more concise controllers.
Installation¶
Download the bundle and put it under the Sensio\Bundle\ namespace.
Then, like for any other bundle, include it in your Kernel class:
1 2 3 4 5 6 7 8 9 10 | public function registerBundles()
{
$bundles = array(
...
new Sensio\Bundle\FrameworkExtraBundle\SensioFrameworkExtraBundle(),
);
...
}
|
Configuration¶
All features provided by the bundle are enabled by default when the bundle is registered in your Kernel class.
The default configuration is as follow:
- YAML
1 2 3 4 5
sensio_framework_extra: router: { annotations: true } request: { converters: true } view: { annotations: true } cache: { annotations: true }
- XML
1 2 3 4 5 6 7
<!-- 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
1 2 3 4 5 6 7
// load the profiler $container->loadFromExtension('sensio_framework_extra', array( 'router' => array('annotations' => true), 'request' => array('converters' => true), 'view' => array('annotations' => true), 'cache' => array('annotations' => true), ));
You can disable some annotations and conventions by defining one or more settings to false.
Annotations for Controllers¶
Annotations are a great way to easily configure your controllers, from the routes to the cache configuration.
Even if annotations are not a native feature of PHP, it still has several advantages over the classic Symfony2 configuration methods:
- Code and configuration are in the same place (the controller class);
- Simple to learn and to use;
- Concise to write;
- Makes your Controller thin (as its sole responsibility is to get data from the Model).
Tip
If you use view classes, annotations are a great way to avoid creating view classes for simple and common use cases.
The following annotations are defined by the bundle:
This example shows all the available annotations in action:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 | 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)
{
}
}
|
As the showAction method follows some conventions, you can omit some
annotations:
1 2 3 4 5 6 7 | /**
* @Route("/{id}")
* @Cache(smaxage="15")
*/
public function showAction(Post $post)
{
}
|
The routes need to be imported to be active as any other routing resources, see Annotated Routes Activation for details.





is a trademark of Fabien Potencier. All rights reserved.