Как подсказал мне @Arms, я начал изучать механизм событий Symfony 2. Теперь я собираюсь записать код, который решил мою проблему (все конфигурации, которые я делаю в YAML, но вы можете сделать это также в XML или PHP).
Сначала вам нужно описать в конфигурации Symfony, какое событие вы хотели бы слушать и что должно вызывать ядро при возникновении события. Для этого откройте файл конфигурации app \ config \ config.yml и добавьте следующий код:
services:
younamespace.yourbundle.listener.preexecute:
class: Location\Of\Your\Listener\Class
tags:
- { name: kernel.event_listener, event: kernel.controller, method: onKernelController }
Ваш класс должен реализовать метод onKernelController следующим образом:
public function onKernelController(FilterControllerEvent $event) {
if(HttpKernelInterface::MASTER_REQUEST === $event->getRequestType()) {
$controllers = $event->getController();
if(is_array($controllers)) {
$controller = $controllers[0];
if(is_object($controller) && method_exists($controller, 'preExecute')) {
$controller->preExecute();
}
}
}
}
После этого каждый раз, когда вы создаете метод preExecute в вашем контроллере, он вызывается перед выполнением каких-либо действий, так что вы можете делать много вещей в этом методе, таких как инициализация переменных или некоторые проверки перед записью в БД и т. Д. на.
Вы также можете посмотреть детали конфигурации здесь (этот пример относится к событию kernel.request, но может помочь вам разобраться)
Веселись;)