Вопрос по symfony – Как получить актуальный комплект в Symfony 2?

9

Как я могу определить, в каком я пакете?

например, когда я нахожусь в web.com/participants/list, я хочу прочитать «участники».

Ваш Ответ

4   ответа
7

AFAIK это пока невозможно (по крайней мере, простым способом). Вы должны использовать отражение. Я написал быстрый и грязный сервис для получения имен пакетов и предположений имен объектов / репозиториев / форм на основе моих соглашений. Может быть глючит, взгляните на:http://pastebin.com/BzeXAduH

Это работает только тогда, когда вы передаете класс, который наследуется от контроллера (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

Другой возможностью было бы использование ядра для получения всех пакетов:Получить имя пакета от сущности

Прошло 2,5 года с момента ответа, кто-нибудь слышал о каких-либо достижениях по этому вопросу? :) Есть ли "чище"? способ узнать название пакета? :)
15

Для того, чтобы получитьbundle name в контроллере:

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

И внутри шаблона Twig:

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

Для того, чтобы получитьcontroller name в контроллере:

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

И внутри шаблона Twig:

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

Для того, чтобы получитьaction name в контроллере:

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

И внутри шаблона Twig:

{{ app.request.get('_template').get('name') }}
достаточно уверен->attributes->get('_template') недоступно, если вы не используете аннотацию @template.
вы можете использовать$request->attributes->get('_controller'); или же$this->getRequest()->attributes->get('_controller'); в контроллере, чтобы получить имя контроллера.
5

Ну, вы можете получить контроллер текущего маршрута,

$request->attributes->get('_controller');

Вы можете разобрать имя пакета из него.

3

Вы можете получить название пакета вcontroller просто так:

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

И внутриTwig template:

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

Похожие вопросы