如何检测我在哪个捆绑包中?
例如,当我在 web.com/participants/list 中时,我想阅读“参与者”。
为了在控制器中获取包名称:
// 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') }}
AFAIK 这还不可能(至少以一种简单的方式)。你应该使用反射。我编写了一个快速而肮脏的服务来根据我的约定获取包名称和猜测实体/存储库/表单名称。可能有问题,看看: 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
那么你可以通过以下方式获得当前路线的控制器,
$request->attributes->get('_controller');
您可以从中解析捆绑名称。
您可以像这样在控制器中获取包名称:
// Display "SybioCoreBundle"
echo $this->getRequest()->attributes->get('_template')->get('bundle');
在Twig 模板内:
{{ app.request.get('_template').get('bundle') }}