Routing Flashcards

1
Q

Как следует обрабатывать параметры запроса? (Request) Можно ли
использовать $_GET, $_POST? Если да, то в каких случаях?

A
  • Запросы представлены классом Request, параметры могут быть получены через паблик свойства класса:
    request — эквивалент $_POST;
    query — эквивалент $_GET ($request->query->get(‘name’));
    cookies — эквивалент $_COOKIE;
    attributes — эквивалента нет, используется для хранения дополнительных данных;
    files — эквивалент $_FILES;
    server — эквивалент $_SERVER;
    headers — в основном эквивалент подгруппе $_SERVER ($request->headers->get(‘User-Agent’)).
  • На ранних этапах загрузки, когда Request недоступен, можно использовать $_GET, $_POST.
How well did you know this?
1
Not at all
2
3
4
5
Perfectly
2
Q

Как создать новый роут?

A

В корне директории модуля создается файл module_name.routing.yml, в котором описывается имя роута, path(путь), обработчик(метод контроллера или формы), права доступа.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
3
Q

a. Как можно определить формат получаемых или возвращаемых данных?

A

Получаемых:
атрибут роута _format

Возвращаемых:
в контроллере:
return new JsonResponse(array());
BinaryFileResponse
RedirectResponse
Response(HTTP)
StreamedResponse
How well did you know this?
1
Not at all
2
3
4
5
Perfectly
4
Q

b. Каким образом можно создать динамический путь?

A

В MODULE.routing.yml объявляем элемент route_callbacks.В элементе route_callbacks определяется callback для генерации маршрутов. Им может быть как метод класса (\Drupal\example\Routing\ExampleRoutes::routes), так и метод сервиса (example.service:routes).
Метод генерации роутов должен возвращать массив объектов класса \Symfony\Component\Routing\Route либо объект класса \Symfony\Component\Routing\RouteCollection.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
5
Q

c. Каким образом можно вывести форму в кастомном пути? А сущность?

A

форма: параметр _form, который указывает на класс формы

Сущность:
_entity_view: entity_type.view_mode
_entity_list: entity_type

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
6
Q

d. Каким образом можно передать информацию или объекты через параметры?

A

В routing.yml:
path: /{argument} - для информации и объектов
Соответственно в методе контроллера роута нужно будет описать параметр $argument.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
7
Q

i. Как нужно объявлять роут, если в должно присутствовать несколько параметров-нод (node)?

A
для нескольких:
path: '.../{node_1}/{node_2}'
options:
parameters:
node_1:
type: entity.node
node_2:
type: entity.node
в контроллере:
function callback
How well did you know this?
1
Not at all
2
3
4
5
Perfectly
8
Q

e. Каким образом можно настроить доступ для пути? (несколько способов)

A

Роль пользователя (_role) – можно указывать, как одну роль, так и комбинации AND/OR посредством символов “,”/”+” соответственно;
Наличие разрешения (_permission) – аналогично роли можно указывать одиночное разрешение или комбинацию;
Наличие разрешения выполнения операции для сущности (_entity_access) – например, node.view выполняет проверку на наличие прав на просмотр ноды;
Кастомный callback управления доступом роута (_custom_access) – подробно можно прочитать в официальной документации;
На основе типа HTTP-запроса (_method) – множество типов указывается с помощью соответствующего символа - “|”.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
9
Q

f. Каким образом можно настроить HTTP-методы, форматы данных или http/https?

A

Методы:
_method: ‘GET|POST’

Форматы данных:
_content_type_format: json

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
10
Q
  1. Каким образом можно изменить уже существующий путь?
A

Создается класс, наследующий RouteSubscriberBase, в котором реализуется метод alterRoutes. Изменять созданные роуты можно путём манипуляций с объектом RouteCollection. После создания класс регистрируется как сервис.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
11
Q
  1. Каким образом можно программно вернуть ошибку (например, 404)?
A

throw new NotFoundHttpException();

How well did you know this?
1
Not at all
2
3
4
5
Perfectly