Атрибут Autowire
Атрибут Autowire вешается на метод или свойство класса и указывает контейнеру зависимостей Symfony, что в это место нужно внедрить сервис. Первым параметром передаётся идентификатор сервиса (обычно это имя класса или интерфейса). Если параметр не указан, Symfony попытается определить сервис автоматически по типу аргумента. Атрибут позволяет гибко управлять внедрением зависимостей там, где стандартный автовайринг не срабатывает или требуется особая логика.
Синтаксис
#[Autowire(service: 'service_id')]
Пример
Давайте внедрим сервис MailerInterface в метод контроллера с помощью атрибута Autowire:
<?php
namespace App\Controller;
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\Mailer\MailerInterface;
use Symfony\Contracts\Service\Attribute\Autowire;
class ArticleController extends AbstractController
{
#[Autowire(service: 'mailer.mailer')]
public function send(MailerInterface $mailer): Response
{
$mailer->send($email);
return new Response('sent');
}
}
?>
Результат выполнения кода:
"sent"
Пример
Давайте внедрим сервис в свойство класса, используя атрибут Autowire без явного указания идентификатора:
<?php
namespace App\Service;
use Symfony\Component\Mailer\MailerInterface;
use Symfony\Contracts\Service\Attribute\Autowire;
class ArticleService
{
#[Autowire]
private MailerInterface $mailer;
public function send(): string
{
$this->mailer->send($email);
return 'sent';
}
}
?>
Результат выполнения кода:
"sent"
Смотрите также
-
класс
Container,
который управляет сервисами приложения -
атрибут
AutowireIterator,
который внедряет итератор сервисов -
атрибут
AutowireLocator,
который внедряет локатор сервисов -
атрибут
Required,
который помечает обязательные зависимости