- Понять принципы построения DI в Symfony
- Понять процессы происходящие при сборке контейнера
- Форкнуть и склонировать проект
- Модифицировать тесты
Tasks/Tests
до позеленения - Отправить пулл-реквест с решением задачи
- Участвовать в обсуждении своего и чужих пулл-реквестов
Используйте symfony ^3.3@dev для работы контейнером symfony (совместим с PSR-11)
Идентификатор сервиса not found
используется в качестве проверки несуществующего сервиса
и не должен быть зарегистрирован в контейнере ни в одном задании
Хорошей практикой является проверка того, может ли ваш ContainerBuilder
быть сохранен в файловый кэш.
Для проверки используйте хелпер Dumper::dump(ContainerBuilder $builder)
Разрешается изменять и создавать новые только файлы в папке Tasks/Tests
кроме изменения иерархии наследования предсозданных болванок тестов
В качестве идентификатора выполненного задания принимаются зеленые тесты (по версии travis-ci)
из папки Tasks/Tests
без измененной иерархии наследования или конфигурации travis
Использовать только конфигурацию контейнера через код.
- Собрать пустой контейнер
- Собрать контейнер, в котором в качестве
сервиса
service_container
зарегистрирован инстанс этого самого контейнера - Собрать контейнер, инициализирующий сервис
static_counter
классаStaticCounter
только один раз при получении - Собрать контейнер, инициализирующий сервис
static_counter
классаStaticCounter
каждый раз заново при получении - Собрать контейнер, инициализирующий сервис
static_counter
классаFactoryCounter
только один раз при получении
- Выполнить задания The Box 3 сконфигурировав контейнер через YAML
- Выполнить задания The Box 4 сконфигурировав контейнер через YAML
- Выполнить задания The Box 5 сконфигурировав контейнер через YAML
- Собрать контейнер, инициализирующий контроллер
GreetingController
в сервисgreeting_controller
так, чтобы зависимостьgreeter
невозможно было получить через контейнер - Соберите контейнер, в котором один и тот же инстанс
greeting_controller
из п. 1 доступен так же по идентификаторамcontroller
иgreeting_action
- Собрать контейнер со следующими харатектеристиками:
- Дано: в контейнере есть сервис
tracker
(BasicTracker
) - Если в контейнере есть сервис
logger
, то нужно задекорироватьBasicTracker
с помощьюLoggingTracker
- Если в контейнере есть сервис
cache
, то нужно задекорироватьBasicTracker
с помощьюCachingTracker
- Если в контейнере есть и сервис
logger
и сервисcache
, то нужно наложить сначала логирующий декоратор, а потом кэширующий
- Дано: в контейнере есть сервис
Пара заданий "со звездочкой"
- Собрать контейнер, инициализирующий сервисы
Circular
:A
,B
иC
с идентификаторамиcircular_a
,circular_b
,circular_c
- Сделать то же самое, без явной настройки зависимостей
Время компилировать!
- Сконфигурируйте контейнер так, чтобы сервис
optional_extension
классаOptionalExtension
был сконфигурирован только в случае наличия сервисаoptional_dependency
. Сервисы добавляются после вашей конфигурации - Сконфигурируйте контейнер так, чтобы в реестр
seeker
попали все сервисы с тегомfind_me