РЕПЕТИТОР математика физика информатика
Для школьников и студентов. Подтягивание пробелов. ЦЭ, ЦТ, ОГЭ, ЕГЭ.
Идет набор на ЛЕТО. Жмите для подробностей:)
735 of 1361 menu

Атрибут When

Атрибут When используется для условной регистрации сервисов в контейнере зависимостей. Он вешается на класс сервиса и принимает условие, при котором этот сервис должен быть доступен. Если условие не выполняется, сервис не попадает в контейнер. Первым параметром передаётся условие, вторым - необязательный признак отрицания.

Синтаксис

#[When(env: env, not: not)]

Пример

Давайте зарегистрируем сервис только для окружения 'dev':

<?php namespace AppService; use SymfonyComponentDependencyInjectionAttributeWhen; #[When(env: 'dev')] class ArticleService { public function getText(): string { return 'hello'; } } ?>

Теперь сервис ArticleService будет доступен только в окружении 'dev'. В других окружениях контейнер не будет его содержать.

Пример

Давайте используем параметр not, чтобы зарегистрировать сервис во всех окружениях, кроме 'test':

<?php namespace AppService; use SymfonyComponentDependencyInjectionAttributeWhen; #[When(env: 'test', not: true)] class ArticleService { public function getText(): string { return 'article'; } } ?>

Теперь сервис ArticleService доступен в 'dev' и 'prod', но не в 'test'.

Пример

Давайте проверим наличие сервиса в контейнере в зависимости от окружения:

<?php namespace AppController; use AppServiceArticleService; use SymfonyBundleFrameworkBundleControllerAbstractController; use SymfonyComponentHttpFoundationResponse; use SymfonyComponentRoutingAttributeRoute; class ArticleController extends AbstractController { #[Route('/article', name: 'article_index')] public function index(): Response { $has = $this->container->has(ArticleService::class); return new Response($has ? 'yes' : 'no'); } } ?>

Результат выполнения кода в окружении 'dev':

"yes"

Результат выполнения кода в окружении 'prod':

"no"

Смотрите также

  • класс Container,
    который управляет сервисами приложения
  • метод has,
    который проверяет наличие сервиса в контейнере
  • атрибут Required,
    который помечает обязательный сервис
  • атрибут Target,
    который указывает цель внедрения зависимости
Мы используем cookie для работы сайта, аналитики и персонализации. Обработка данных происходит согласно Политике конфиденциальности.
принять все настроить отклонить