奇怪的问题, 我有控制器使用 \ Symfony \ Component \ DependencyInjection \ ContainerAwareTrait
class MainController
{
use \Symfony\Component\DependencyInjection\ContainerAwareTrait;
/**
* @Route("/", name="_index")
* @Template()
*/
public function indexAction()
{
var_dump($this->container);
return array();
}
}
但结果为NULL。
试图:
我的搜索没有帮助我。我认为解决方案很简单。
有任何想法如何追踪此错误?
UPD:当我从Controller扩展时,容器可用且一切正常。但根据symfony控制器参考扩展是可选的,我可以使用特征。
答案 0 :(得分:20)
我将根据对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();
}
}
顺便说一句,对于Duck Typing来说,这可以说是一个非常好的例子,特别是如果他们将方法命名为更具体一些,或者在运行时检查参数类型到方法的价格更便宜