Подтвердить что ты не робот

Symfony 2: инъекция зависимостей (DI) контроллеров

Есть ли вероятность, что контроллеры зависят от их услуг, а не через использование контейнера обслуживания внутри них, но через инъекцию зависимости чистого конструктора?

Я хотел бы написать контроллеры таким образом:

<?php

class ArticleController extends \Symfony\Bundle\FrameworkBundle\Controller\Controller
{
    private $articleFacade;
    private $articleRepository;

    public function __construct(ArticleFacade $articleFacade, ArticleRepository $articleRepository)
    {
        $this->articleFacade = $articleFacade;
        $this->articleRepository = $articleRepository;
    }

    public function indexAction()
    {
        ...
    }

}

К сожалению, Symfony ControllerResolver делает новые экземпляры контроллеров не через ServiceContainer, а через простой вызов return new $controller.

4b9b3361

Ответ 1

Абсолютно на самом деле это рекомендуется, и если вы посмотрите на большинство сторонних пакетов, таких как FOSUser, вы можете видеть, что это именно то, что они делают.

Фокус в том, чтобы определить ваши контроллеры как службы, а затем использовать идентификатор службы вместо имени класса.

http://symfony.com/doc/current/cookbook/controller/service.html

Имейте в виду, что вам придется вводить все необходимые службы, такие как менеджеры сущностей, и обычно вы не расширяете базовый класс symfony. Конечно, вы можете ввести полный контейнер, но это, как правило, недоверчиво.