Контейнер для Symfony черты

странная проблема, У меня есть контроллер, который использует SymfonyComponentDependencyInjectionContainerAwareTrait

class MainController
{
    use SymfonyComponentDependencyInjectionContainerAwareTrait;
    /**
     * @Route("/", name="_index")
     * @Template()
     */
    public function indexAction()
    {
         var_dump($this->container);

         return array();
    }
}

но результат равен NULL.

померила:

  • Symfony 2.5.*
  • MAMP 3.0
  • PHP 5.4 5.5

мои поиски не помогли мне. Я думаю, что решение простое.

есть идеи, как отследить эту ошибку?

UPD: когда я расширьте от регулятора, контейнер доступен и все работает как следует. Но в соответствии с расширением ссылки на контроллер symfony необязательно, я могу использовать черты вместо этого.

1 ответов


Я рискну предположить, основываясь на быстром взгляде на исходный код Symfony: вам все равно нужно объявить, что вы придерживаетесь ContainerAwareInterface интерфейс.

вот как выглядит код, когда Symfony устанавливает контейнер на контроллере.

if ($controller instanceof ContainerAwareInterface) {
  $controller->setContainer($this->container);
}

Итак, я полагаю, что вам нужно сделать что-то вроде этого:

use Symfony\Component\DependencyInjection\ContainerAwareInterface;
use Symfony\Component\DependencyInjection\ContainerAwareTrait;
// ...
class MainController implements ContainerAwareInterface 
{
    use ContainerAwareTrait;
    /**
     * @Route("/", name="_index")
     * @Template()
     */
    public function indexAction()
    {
         var_dump($this->container);

         return array();
    }

}

в стороне, это, возможно, довольно хороший случай для Утиной Типизацией, особенно если они назвал метод чем-то более конкретным или если было дешевле проверить типы параметров на методы во время выполнения