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

Я создал абстрактный класс 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']

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

...