我正在尝试在Symfony控制器中访问服务
$session = $this->get('session');
但是我得到了下一个错误:
PHP Fatal error: Call to a member function get() on a non-object
我认为Symfony2默认将控制器定义为服务。
注意:这个问题最初是由Dbugger提出的,但是他已经无缘无故删除了它。
get()
仅是Symfony基本Controller类提供的用于访问容器的快捷方式功能。
您的控制器必须扩展此类才能使用此功能:
namespace Acme\ExampleBundle\Controller;
use Symfony\Bundle\FrameworkBundle\Controller\Controller;
class DefaultController extends Controller
{
// your actions
}
如果您不想依赖此类(出于某些原因),可以扩展ContainerAware
以注入容器并像在get()
快捷方式中那样使用它:
namespace Acme\ExampleBundle\Controller;
use Symfony\Component\DependencyInjection\ContainerAware;
class DefaultController extends ContainerAware
{
public function exampleAction()
{
$myService = $this->container->get('my_service');
// do something
}
}
默认情况下,未将控制器定义为服务,您可以定义它们,但不需要获取容器。如果发出请求,则路由框架将确定需要调用的控制器。然后构造控制器,并通过该setContainer()
方法注入容器。
但是,如果您自己构造控制器(在测试或其他任何地方),则必须自行注入容器。
$controller = new DefaultController();
$controller->setContainer($container);
// $container comes trough DI or anything else.
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句