Symfony2 контроллер после инициализации обратного вызова?

У меня есть контроллер, который вызывает службу с $this->get('app.service.myservice') во многих функциях обработка маршрутов.

Вместо того, чтобы систематически получать эту службу, мне было интересно, есть ли способ уведомления о том, что контроллер и службы созданы. Я ищу какой-то обратный вызов в жизненном цикле контроллера.

Затем я бы однажды получил сервис и сохранил его в переменной с контроллером.

1

Решение

Диспетчер маршрутов генерирует серию событий на каждом этапе обработки. События не слишком документированы, но вы можете проверить код отправки, а также:

http://symfony.com/doc/current/reference/events.html

Вы хотите прослушать событие kernel.controller:

http://symfony.com/doc/current/reference/events.html#kernel-controller

Слушатели обсуждаются здесь:

http://symfony.com/doc/current/cookbook/event_dispatcher/event_listener.html

Сказав это, если все, что вы хотите сделать, это добавить определенную службу в определенные контроллеры, то рассмотрите возможность определения вашего контроллера как службы, как обсуждалось здесь:

http://symfony.com/doc/current/cookbook/controller/service.html

Ваше определение сервиса может выглядеть так:

cerad_project_tournament_import_controller:
class: Cerad\ProjectTournament\Import\ImportController
calls: [[setContainer, ['@service_container']]]
arguments:
- '@cerad_project_tournament_importer_excel'

С маршрутом:

project_tournament_import:
path:     /import
methods:  [GET,POST]
defaults:
_controller: cerad_project_tournament_import_controller:importAction

И контроллер класса:

use Symfony\Bundle\FrameworkBundle\Controller\Controller;

final class ImportController extends Controller
{
private $importer;

public function __construct(ImporterExcel $importer)
{
$this->importer = $importer;
}

Использование сервисов позволит избежать проблем со слушателями и даст вам более чистый подход.

1

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]