Контейнер для 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();
}
}
в стороне, это, возможно, довольно хороший случай для Утиной Типизацией, особенно если они назвал метод чем-то более конкретным или если было дешевле проверить типы параметров на методы во время выполнения