Атрибут Required
Атрибут Required вешается на класс сервиса
или на его метод и указывает контейнеру внедрения
зависимостей, что данный сервис должен быть создан
и доступен. Если сервис помечен этим атрибутом,
но не используется нигде в приложении, контейнер
не удалит его при компиляции. Параметров у атрибута нет.
Синтаксис
#[Required]
Пример
Давайте пометим класс сервиса атрибутом Required,
чтобы контейнер всегда его создавал:
<?php
namespace AppService;
use SymfonyContractsServiceAttributeRequired;
#[Required]
class ArticleService
{
public function getText(): string
{
return 'article';
}
}
?>
Теперь сервис ArticleService будет зарегистрирован
в контейнере независимо от того, внедряется он куда-либо
или нет.
Пример
Давайте получим помеченный сервис из контейнера и вызовем его метод:
<?php
namespace AppController;
use AppServiceArticleService;
use SymfonyBundleFrameworkBundleControllerAbstractController;
use SymfonyComponentHttpFoundationResponse;
use SymfonyComponentRoutingAttributeRoute;
class ArticleController extends AbstractController
{
#[Route('/article', name: 'article_index')]
public function index(ArticleService $service): Response
{
return new Response($service->getText());
}
}
?>
Результат выполнения кода для адреса /article:
"article"
Пример
Давайте пометим атрибутом Required метод сервиса,
который должен вызываться контейнером автоматически:
<?php
namespace AppService;
use SymfonyContractsServiceAttributeRequired;
class UserService
{
private string $name = '';
#[Required]
public function setName(string $name): void
{
$this->name = $name;
}
public function getName(): string
{
return $this->name;
}
}
?>
При создании сервиса контейнер вызовет метод setName
и передаст в него значение из параметров контейнера.