Что такое контейнер в Symfony

Давайте познакомимся с еще одним важным теоретическим понятием в Symfony, которое тесно связано с понятием сервис. Это понятие контейнер в Symfony

Что это такое и для чего это нужно, давайте будем разбираться.

Контейнер - это некая "коробка", куда мы можем что-то складывать. Что же это за коробка в Symfony, что мы можем туда положить?

Приложение, которое разрабатывается в Symfony, содержит очень много классов (или сервисов). Т.е. классы, которые есть в нашем приложении являются сервисами. 

Наше приложение содержит огромное количество файлов, классов и.т.д.

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

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

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

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

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

Контейнер как класс

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

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

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

Пока мы в общих чертах с этим разобрались, что такое сервис и контейнер. Из контейнера мы можем вытаскивать сервисы и использовать их в нашем приложении. 

Пока теоретически мы познакомились с этим и теперь давайте будем переходить практике и посмотрим все подробнее.