我在src'trollmaster'TrollBundle'Services'DefaultService.php
做了一个服务
namespace trollmaster'TrollBundle'DefaultService;
class DefaultService
{
protected $example;
protected function exampleFunction()
{
return null;
}
}
我资源' config ' services.yml :
services:
trollmaster.default_service:
class: trollmaster'TrollBundle'DefaultService
和命令php app/console container:debug
正确返回了我的服务名称,但是当我想在控制器的构造中调用该服务时:
$this->DefaultService = $this->get("trollmaster.default_service");
看到这个错误:
Error: Call to a member function get() on a non-object
我做错了什么?
编辑:
当我想将controller定义为service
/**
* @Route(service="DefaultController")
*/
class DefaultController
I got error:
ClassNotFoundException: Attempted to load class "DefaultController" from namespace "trollmaster'TrollBundle
原因是容器被注入到实现ContainerAwareInterface
的控制器
…(即通过扩展Symfony'Bundle'FrameworkBundle'Controller'Controller
)…
…通过 setter注入。
TLDR:在对象构造完成后执行 setter注入。
因此你不能做…
$service = $this->get('service');
// ... or ...
$service = $this->container->('service');
…在__construct()
方法中,因为setContainer()
方法没有被调用,$this->container
还没有设置。
你可以在文档中了解更多不同类型的注入。
看一下下面的代码部分:
Controller
延伸ContainerAware
在ContainerAware
提供了setContainer()
方法这里
这是因为构造函数不知道容器(就像nifr解释的那样)。但你可以将控制器本身定义为服务。我想这是最好的做法,尽管我不知道你想要达到什么目的。