Содержание

1. Symfony события

В этой серии видео мы с вами остановимся на вопросах работы с событиями (events) на фреймворке Symfony. Что такое события, какие они бывают и, главное, как мы можем привязаться к этим событиям и в этот момент что-то делать и совершать какие-то действия. 

Symfony события

symfony event

Давайте начнем с событий. Когда мы разрабатываем какое-то Symfony приложение, мы понимаем, что это приложение будет работать у нас по протоколу HTTP. Это означает, что мы отправляем приложению запрос и получаем от него какой-то ответ. Принцип клиент-серверной архитектуры. 

Нужно понимать, что начиная от момента получения запроса, до отдачи response (ответа) происходит ряд различных действий. Каждое действие является неким событием. 

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

События, к которым мы можем привязаться и делать какие-то действия, можно разделить на 2 типа: 

  • события ядра (core events)
  • пользовательские события (custom events).

События ядра (core events)

это встроенные в Symfony события, к которым мы можем привязаться. Они установлены по умолчанию и мы можем их использовать. 

Пользовательские события (custom symfony events). 

Такие события мы можем создавать сами и в дальнейшем к ним привязываться. Также эти события могут создавать какие-то бандлы или библиотеки, которые используются в нашем проекте.

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

Несколько примеров применения слушателей событий, которые мы можем использовать. 

Мы можем делать какие-то действия при каждом запросе к нашему сайту. Можно проверять выставлен ли язык сайта из сессии или из кук, если это установлено, мы выбираем язык для пользователя.

Можно заблокировать пользователя с какими-то характеристиками. Можно заблокировать запросы со всех браузеров, кроме одного.

Защита от злоумышленников. Они могут сделать копию вашего сайта на других доменах. С помощью слушателя событий можно легко заблокировать такие запросы.

Это действия, которые мы можем выполнять при каком-то запросе, также можно выполнять действия при ответе. Мы можем прописывать эту логику в контроллерах, но представьте, что у нас огромный проект и в каждом контроллере прописать все эти однотипные действия сложная задача. Здесь это можно сделать более гибко.

Для запросов на ответ. Например, мы хотим добавить какой-то HTTP-заголовок для всех или определенных запросов, которые будут поступать к нашему проекту. Слушатели событий (event listeners) позволяют это легко сделать. 

Часто слушатели событий применяются при изменении данных или структуры данных в базе данных. 

Например, что-то добавилось в сущность в базе данных или изменилось и мы можем в этот момент что-то сделать. Можно модифицировать эти данные. Отправить пользователю email. Либо можем присоединить какие-то дополнительные данные к тем, которые мы получаем.

Часто используется при взаимодействии с API Platform в Symfony. Там часто не хватает каких-то данных или нужно присоединить какие-то данные. 

event listener

С событиями мы можем работать 2 способами: 

  • слушателями событий (Event listeners)
  • подписчиками на события (Event subscriber)

Смысл работы с этими 2 инструментами одинаковый. Мы ловим какое-то событие и в момент его наступления, выполняем какие-то действия. Есть только отличия по технике.

Это основное, что хотелось рассказать в вводной части по поводу событий и слушателей событий в Symfony. 

Далее давайте приступим к практике и посмотрим на реальном примере, как мы можем эти события получить и выполнять какие-то действия в момент их наступления.