Что собой представляет сервис и контейнер

Symfony - это фреймворк, который работает на основе сервисов. Практически все, с чем нам предстоит взаимодействовать, является сервисом (service).

Сервис - это класс, который реализует какую-то функциональность. Мы можем получить объект этого класса и использовать его в своем приложении, чтобы избежать повторяемости кода.

Для получения сервиса в Symfony 6 можно использовать контейнер зависимостей (Dependency Injection Container). Контейнер зависимостей является центральным элементом в Symfony и отвечает за создание, настройку и управление сервисами в приложении.

Более подробно о сервисах и как с ними работать, я рассказываю в своем видеокурсе https://webkyrs.info/category/symfony-rabota-s-servisami

Создаем свой сервис

Давайте для начала создадим сам сервис.

// src/Service/MyService.php
namespace App\Service;


class MyService
{
    public function myFunction()
    {
        // Реализация функциональности
    }
}

Получение сервиса внутри контроллера

Для того, чтобы получить наш сервис внутри контроллера, мы можем воспользоваться контейнером зависимостей и получить его с помощью Dependency Injection. Следующий пример показывает, как это можно сделать:

// src/Controller/MyController.php
namespace App\Controller;

use App\Service\MyService;
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
use Symfony\Component\HttpFoundation\Response;

class MyController extends AbstractController
{
    public function myAction(MyService $myService)
    {
        $result = $myService->myFunction();
        return new Response($result);
    }
}

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

Получение сервиса внутри другого сервиса.

// src/Service/AnotherService.php
namespace App\Service;


class AnotherService
{
    private $myService;


    public function __construct(MyService $myService)
    {
        $this->myService = $myService;
    }


    public function anotherFunction()
    {
        $this->myService->myFunction();
    }
}

Таким образом, мы внедрили сервис в методе construct и можем теперь его использовать. Обратите внимание, что вы можете передавать несколько сервисов в конструктор другого сервиса.

Напоминаю, что по этой ссылке мой видеокурс, где вы можете познакомиться подробнее как работать с сервисами https://webkyrs.info/category/symfony-rabota-s-servisami

Это основные способы, как можно получить сервис в Symfony приложении. Эти способы чаще всего приходится использовать на практике. Надеюсь это поможет.