Я создал абстрактный класс 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']
Как лучше всего связать эти аргументы автоматически, и будет ли это хорошей практикой?