Routing Flashcards
Как следует обрабатывать параметры запроса? (Request) Можно ли
использовать $_GET, $_POST? Если да, то в каких случаях?
-Запросы в Drupal представлены классом Request компонента Symfony HttpFoundation. Параметры могут быть получены через паблик свойства класса:
request — эквивалент $_POST;
query — эквивалент $_GET ($request->query->get(‘name’));
cookies — эквивалент $_COOKIE;
attributes — эквивалента нет, используется для хранения дополнительных данных;
files — эквивалент $_FILES;
server — эквивалент $_SERVER;
headers — в основном эквивалент подгруппе $_SERVER ($request->headers->get(‘User-Agent’)).
Каждое свойство — это экземпляр класса ParameterBag (класс, который представляет собой контейнер для хранения пары ключ/значение). Методы:
get - получить значения по имени параметра.
all - получить все параметры или используется для получения массива значений параметра
https://nightdevel.ru/urok-3-requests-i-responses-routing-i-kontrollery
https://symfony.com/doc/current/components/http_foundation.html
- На ранних этапах загрузки, когда Request недоступен, можно использовать $_GET, $_POST.
Как создать новый роут?
В корне директории модуля создается файл module_name.routing.yml, в котором описывается имя роута, path(путь), обработчик(метод контроллера или формы), права доступа.
Каким образом можно изменить уже существующий роут?
Создается класс, наследующий RouteSubscriberBase, в котором реализуется метод alterRoutes. Изменять созданные роуты можно путём манипуляций с объектом RouteCollection. После создания класс регистрируется как сервис.
Что такое Middleware? Для чего используется? Как создать свой?
- Сервис, обрабатывающий http-запрос,
- используется для того чтобы:
• Редиректить при определенных условиях.
• Лимитировать количество запросов с определенных IP. - Создается класс имплементирующий интерфейс HttpKernelInterface Обязательный метод handle() отвечает за всю логику. Если ваш Middleware не responder(может вернуть уже готовый ответ сервера (Response)), то вы должны всегда возвращать return $this->httpKernel->handle($request, $type, $catch);, так обработка запроса передается другим посредникам.