Symfony2 Set Controller в kernelControllerEvent с использованием bundle: controller: нотация действия - PullRequest
3 голосов
/ 13 февраля 2012

Я пытаюсь сделать что-то вроде следующего вопроса:

Попытка заменить контроллер с помощью прослушивателя событий с Symfony2

Однако, когда я использую код (как рекомендуется в ответе):

$event->setController('MyMainBundle:Manage:show');

Я просто получаю сообщение об ошибке:

LogicException: The controller must be a callable (MyMainBundle:Manage:show given).

Есть ли способ использовать этот Bundle: Controller: Method синтаксис в setController? Или, может быть, какой-то другой метод, который я могу вызвать, чтобы разрешить это как «вызываемый»?

1 Ответ

5 голосов
/ 13 февраля 2012

То, что вы должны дать $event->setController, может быть вызвано.То, что вы даете строку, представляющую логический путь к вызываемому объекту.

Вы можете разрешить эту строку, используя symfony ControllerResolver.

Вы должны внедрить службу controller_resolver в своем слушателе, а затем использоватьэто так:

$request = new Symfony\Component\HttpFoundation\Request();
$request->attributes->set('_controller', 'MyMainBundle:Manage:show'));
$event->setController($this->resolver->getController($request));

Но вы явно выполняете работу фреймворка здесь.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...