Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Check in a Twig template if the current route belongs from a specific Symfony2 bundle

A Symfony2 app is usually organized around bundles. Each bundle contains (many) controllers. Each controller should be mapped with a route.

Practically speaking, routes are usually stored in a specific file under the config folder of the bundle or, eventually, annotated inside each controller.

What I'm looking for is a way in Twig to identify if the current route belongs from a specific Symfony bundle. Is it possible?

Please, as a final remark, consider that the route name should follows the namespace of the controller, in my opinion, but it could also be a random but unique name, e.g. qwer_XX instead of ACME_HomeBundle_home. Hence, we cannot resort to a namespace-to-route-name association to do what I'm asking for.

like image 691
JeanValjean Avatar asked Feb 01 '13 10:02

JeanValjean


1 Answers

Looking at the Request object, I found a possible solution.

The controller is attached to the Request object, hence one can extract it in Twig from the string:

app.request.attributes.get('_controller')

and so retrieve the bundle name. For instance one can define through a TwigExtension such a filter function, e.g.

public function getFilters() {
    return array(
        ...//other filters
        'bundleName'=>new \Twig_Filter_Method($this, 'bundleNameFilter'),
    );
}

public static function bundleNameFilter($string){
  return strstr(substr(strstr($string, '\\'), 1), '\\', true);
} 

Then, in twig use it as follows:

{{  app.request.attributes.get('_controller') | bundleName }}

Hope it helps.

like image 125
JeanValjean Avatar answered Nov 15 '22 09:11

JeanValjean