5.2 Определение сервиса
Чтобы заставить контейнер создавать некоторый объект в качестве сервиса - нужно прописать соответствующую конфигурацию в YAML, XML или PHP:
# app/config/config.yml
services:
my_mailer:
class: Acme\HelloBundle\Mailer
arguments: [sendmail]
Экземпляр объекта Acme\HelloBundle\Mailer теперь можно получить через контейнер служб. А сам контейнер доступен в любом контроллере Symfony2 при помощи вспомогательного метода get():
$mailer = $this->get('my_mailer');
$mailer->send('[email protected]', ... );
Когда запрашивается сервис my_mailer, контейнер создаёт его объект и возвращает его. Таким образом сервис не создаётся вплоть до того момента, когда он будет нужен вам. А сервисы, которые не используются - не будут созданы.
Контейнер сервисов создаётся с использованием одного конфигурационного ресурса (app/config/config.yml). Все прочие ресурсы для сервисов должны импортироваться. Существует два способа импорта конфигураций контейнера:
- Директива "imports" внутри config.yml
# app/config/config.yml imports: hello_bundle: resource: @AcmeHelloBundle/Resources/config/services.yml
Расширения контейнера (Container Extensions)
Конфигурация контейнера для сторонних пакетов, включая сервисы ядра Symfony, как правило, загружается при помощи другого метода, более гибкого и просто для настройки в вашем приложении.
Расширение контейнера сервисов - это PHP класс, созданный для выполнения следующих функций:
- Импорт всех ресурсов контейнера сервисов, необходимых для конфигурации всех служб бандла;
- Предоставление простой и понятной конфигурации, при помощи которой пакет можно настроить, не взаимодействуя напрямую с конфигурацией контейнера сервисов пакета.
http://blog.doninter.ru/konfiguraciya-bandla-cherez-extension-klass