У меня есть контроллер, который вызывает службу с $this->get('app.service.myservice')
во многих функциях обработка маршрутов.
Вместо того, чтобы систематически получать эту службу, мне было интересно, есть ли способ уведомления о том, что контроллер и службы созданы. Я ищу какой-то обратный вызов в жизненном цикле контроллера.
Затем я бы однажды получил сервис и сохранил его в переменной с контроллером.
Диспетчер маршрутов генерирует серию событий на каждом этапе обработки. События не слишком документированы, но вы можете проверить код отправки, а также:
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;
}
Использование сервисов позволит избежать проблем со слушателями и даст вам более чистый подход.
Других решений пока нет …