Как автоматически связать Зависимости общего контроллера в Symfony, используя класс Abstract

Я создал абстрактный класс BaseController, который расширяет AbstractController.
Это сделано для того, чтобы все Общие зависимости не приходилось вводить в каждый из имеющихся у меня классов контроллеров (например, EntityManager и RequestStack).

Однако у меня есть несколько классов Controller, в которые я хотел бы добавить дополнительные сервисы в конструктор, но это вызывает проблемы.

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

use Doctrine\ORM\EntityManagerInterface;
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
use Symfony\Component\HttpFoundation\RequestStack;

abstract class BaseController extends AbstractController
{
protected $em;
protected $request;

public function __construct(EntityManagerInterface $em, RequestStack $request)
{
$this->em = $em;
$this->request = $request->getCurrentRequest();
}
}

Затем я могу просто расширить свои классы контроллера и вызвать, например, $ this-> em в любом из методов.

Однако, допустим, я хотел сделать следующее:

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

use Symfony\Component\Translation\TranslatorInterface;

class DashboardController extends BaseController
{
public function __construct(TranslatorInterface $translator)
{
parent::__construct();
$this->translator = $translator;
}

public function index()
{
// use $this->translator()
}
}

Это может вызвать ошибку, так как конструктор BaseController ожидает передачи двух аргументов.
Я попытался добавить следующее в мои services.yaml, но безрезультатно:

App\Controller\BaseController:
arguments: ['@doctrine.orm.entity_manager', '@request_stack']

Каков наилучший способ автоматически связать эти аргументы, и будет ли это хорошей практикой?

0

Решение

Задача ещё не решена.

Другие решения

Других решений пока нет …

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector