Конфигурация

Конфигурировние сервисов играет ключевую роль в построении свазей между классами.
Зависимости классов для каждого эндпоинты мы рекомендуем описывать а одном файле. Зависимсти одного модуля описывать в файле обобщающей конфигурации.

Рассмотрим пример эндпоинта профиля пользователя. В оснвной файл конфигурации добавим импорт файла-аггрегатора конфигов модулей:

// config/services.yml

...
imports:
    - './endpoints/endpoints.yml'

Файл endpoints.yml аггрегирует в себе список всех модулей. Сейчас у нас только один модуль - модуль пользователей.

// config/endpoints/endpoints.yml

imports:
  -
    resource: user.yml

Замечание

Файл endpoints.yml может показаться излишним, но он необходим, если вы будете использовать генератор кода Symfobooster Devkit

В файле модуля описан только список эндпоинтов

// config/endpoints/user.yml

imports:
  -
    resource: user/profile.yml

Информация

Что-бы не создавать все эти файлы руками воспользуйтесь генератором эндпоинтов в Symfobooster Devkit

Наконец мы добрались до конфигурации эндпоинта

// config/endpoints/user/profile.yml

services:
  user.profile.controller:
    public: true
    parent: symfobooster.controller
    arguments:
      $service: '@user.profile.service'
      $inputLoader: '@user.profile.input'
  user.profile.service:
    class: App\User\Profile\ProfileService
    arguments:
      $repository: '@App\User\Domain\UserRepositoryInterface'
  user.profile.input:
    parent: symfobooster.input.loader
    arguments:
      $input: '@App\User\Profile\ProfileInput'

Рассмотрим каждый компонент отдельно.

Контроллер

Информация

Подробнее о контроллере читайте в разделе Controller

Контроллер user.profile.controller принимает сервис и инпут. Это стандартный компонент каждого эндпоинта.

Сервис

Информация

Подробнее о сервисе читайте в разделе Service

Сервис user.profile.service содержит вашу бизнес-логику. В данном случае получение информации о пользователе из базы данных, проверка, что пользователь существует и формирование ответа. Сервис зависит от интерфейса репозитория. Поскольку репозиторий это класс необходимый для всего модуля, то укажем его в файле конфигурации модуля.

config/endpoints/user.yml

services:
  App\User\Domain\UserRepositoryInterface:
    class: App\User\Repository\UserRepository

imports:
  -
    resource: user/profile.yml
 
 
 




Инпут

Информация

Подробнее об инпуте читайте в разделе Input

Инпут user.profile.input это описание всех входящих данных, которые необходимы для работы эндпоинта. В данном случае инпут будет содержать одно поле - идентификатор пользователя и валидаторы для него.

В этом файле вам необходимо дописать все необходимые для работы эндпоинта классы.

Дополнительные возможности

Symfobooster содержит компоненты, которые помогут вам решать и другие проблемы.

Transactional

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

// TODO