如何在Symfony 2中获取当前捆绑包?

时间:2012-05-11 07:55:48

标签: symfony

我如何检测我在哪个捆绑包?

例如,当我在web.com/participants/list中时,我想阅读“参与者”。

4 个答案:

答案 0 :(得分:15)

为了在控制器中获取捆绑名称

// Display "AcmeHelloBundle"
echo $this->getRequest()->attributes->get('_template')->get('bundle');

在Twig模板中:

{{ app.request.get('_template').get('bundle') }}

为了在控制器中获取控制器名称

// Display "Default"
echo $this->getRequest()->attributes->get('_template')->get('controller');

在Twig模板中:

{{ app.request.get('_template').get('controller') }}

为了在控制器中获取操作名称

// Displays "index"
echo $this->getRequest()->attributes->get('_template')->get('name');

在Twig模板中:

{{ app.request.get('_template').get('name') }}

答案 1 :(得分:7)

AFAIK尚不可能(至少以一种简单的方式)。你应该使用反射。我写了一个快速而又脏的服务来根据我的约定获得bundle name ang guess实体/存储库/表单名称。可以跑车,看看:http://pastebin.com/BzeXAduH

仅在传递继承自Controller(Symfony2)的类时才有效。用法:

entity_management_guesser:
  class: Acme\HelloBundle\Service\EntityManagementGuesser

在您的控制器中:

$guesser = $this->get('entity_management_guesser')->inizialize($this);

$bundleName  = $guesser->getBundleName();      // Acme/HelloBundle
$bundleShort = $guesser->getBundleShortName(); // AcmeHelloBundle

另一种可能性是使用内核来获取所有捆绑包:Get a bundle name from an entity

答案 2 :(得分:5)

你可以通过

获得当前路线的控制器
$request->attributes->get('_controller');

您可以从中解析包名称。

答案 3 :(得分:3)

您可以在控制器中获取包名称:

// Display "SybioCoreBundle"
echo $this->getRequest()->attributes->get('_template')->get('bundle');

Twig模板中

{{ app.request.get('_template').get('bundle') }}