Module Flashcards

1
Q

Какой минимальный набор файлов нужен для создания модуля? Какие ещё
файлы там могут быть? Зачем нужен каждый из них?
a. Что может находиться внутри .info файла?
b. Что такое апдейты (hook_update)?
i. Что такое пакетная операция? Как применить её внутри
hook_update?
c. Что может находиться внутри composer.json? Как это использовать?
d. Как подключить внешнюю php-библиотеку?

A

module.info.yml - содержит информацию о модуле и его зависимостях, дает сигнал ядру drupal о том, что модуль существует
module.install - содрежит hook_install и hook_update
module.module - содержит хуки и кастомные функции
module.permissions.yml - содержит записи о разрешениях, которые добавляет в систему модуль
module.routing.yml - содержит записи о роутах модуля со ссылками на соответствующие классы
module.links.menu.yml - содержит информацию о том в каком меню нужно расположить ссылку на тот или иной роут
/config/install/module.settings.yml - содержит данные по-умолчанию в виде ключ:значение
/config/schema/module.schema.yml - содержит разделы для создания кастомных таблиц в БД и данные о присвоении значений по-умолчанию полям форм
/src/Controller/MyModuleController.php - содержит контроллер роута
/src/Form/… - контроллеры форм
/src/Plugin/Block/… - контролееры блоков
/templates - шаблоны для темизации

Суть batch в том чтобы максимально эффективно использовать ресурсы сервера для выполнения задачи при этом не затормозить его работу. Также batch api позволяет разделить длительную операцию на множество более коротких и отображать визуально прогресс выполнения задачи.

подключить пхп библиотеку: понятия не имею, лучше так не делать

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

Что такое “сервис”? Как создать свой?

a. Какова структура описания сервиса?
b. Как можно подменить уже существующий сервис? Способы.
i. По ключу
ii. Декорацией
iii. Через сервис провайдер
c. Для чего используются сервис-тэги?
i. Проперти тэгов: name, tag, call.
d. Доп. возможности:
i. Публичные и приватные сервисы
ii. Декорация сервисов
iii. Коллекции сервисов
iv. Алиасы
v. Наследование
vi. т.п.

A

Сервис – это любой объект, который объявляется в module.services.yml Это независимая единица кода, которая позволяет выполнять ту или иную функцию, услуга

создать класс сервиса и прописать его в сервисес ямл

подменить существующий сервис через сервиспровайдер, декорацию, по ключу.

name — название тега (по нему и будут искать сервисы с одним тегом);
tag — внутреннее именование “тега” внутри того кода, который дергает сервисы по данному тегу, по дефолту принимает название сервиса;
call — название метода, который нужно вызвать для получения результата

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

Каким образом можно обратиться к сервису (получить сервис)?
a. Глобальный объект Drupal
b. Через фабричный метод и инъекцию зависимости
i. Что такое “инъекция зависимости”, зачем она нужна? Каким
образом её можно осуществить в Drupal 8?
ii. Что такое Service container (DI-container)?
c. Через указание аргументов при описании сервиса

A

a. Глобальный объект Drupal
$date = \Drupal::service(‘date’);

b. Через фабричный метод и инъекцию зависимости

i. Что такое “инъекция зависимости”, зачем она нужна? Каким
образом её можно осуществить в Drupal 8?
Инъекция зависимости это наиболее предпочтительный способ для работы с сервисами в Drupal 8 и именно его следует использовать в первую очередь. Вместо обращения к глобальным сервис контейнерам, сервисы передаются как аргументы в конструктор или внедряются через «сеттеры».

ii. Что такое Service container (DI-container)?

c. Через указание аргументов при описании сервиса
dummy. services.yml

parameters:
dummy.message_types:[‘status’,’warning’,’error’]

services:

dummy. random_message:
class: Drupal\dummy\RandomMessageGenerator
dummy. random_drupal_message:
class: Drupal\dummy\RandomDrupalMessage
arguments: [‘@dummy.random_message’, ‘%dummy.message_types%’]

Здесь @dummy.random_message указывает на то, что сервис dummy.random_message передается в dummy.random_drupal_message в качестве аргумента. Таким образом реализуется инъекция зависимости

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

Что такое “плагин”? Чем плагин отличается от сервиса?

a. Как создать свой плагин уже существующего типа?
b. Как создать новый тип плагина?
c. Что такое Plugin Derivative, зачем он нужен?
d. Как можно подменить уже существующий плагин?

A

Плагин - маленький кусочек функциональности, а плагинМенеджер - сервис.
Плагины - классы, наследующие плагинбесе

a. Как создать свой плагин уже существующего типа?
плагин должен наследовать плагинбейс и иметь аннотацию с @plugin
b. Как создать новый тип плагина?
PluginDerriative - позволяет реализовать одним классом сколько угодно плагинов.
c. Что такое Plugin Derivative, зачем он нужен?
d. Как можно подменить уже существующий плагин?
через аннотацию, и еще каким-то методом

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

Что такое “аннотация” (в плагине)?

a. Как создать свою?

A

Аннотация – это набор данных по которым PluginManager понимает что это за плагин.

src/Annotation
там класс, который наследуется от плагин и имеет название такое же, что и @plugin в аннотации к плагину

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

Как создать свою кастомную таблицу?

A

а) hook_schema() в файле module.install

б) + hook_update_N() в файле module.install в случае, если таблица создается после установки модуля

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

Где и как хранятся текущие версии модулей? Как можно изменить текущую
версию?

A

Текущие версии модулей хранятся в composer.lock
Чтобы установить указанные в этом файле версии модулей следует запустить команду “composer install”
Команда «composer update» позволяет произвести поиск новых версий модулей и установить их

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