在 Symfony 2.8 中将服务注入控制器?

我真的很努力尝试将服务注入控制器,我找到了一些帖子,这就是我尝试过的:

我有一个名为 FormatService 的服务

services:
    formats_service:
            class: FormatsBundle\Services\FormatService

我希望将其注入FormatsController,因此我尝试将控制器定义为服务,然后按照文档所述更改了我的整个路由

app.formats_controller:
        class: ABundle\Controller\FormatsController
        arguments: ["@formats_service"]

Error: Call to a member function has() on null当我尝试从我的控件访问任何端点时,这样做会出现错误

然后我尝试从容器中收集它,做这样的事情

public function __construct () {
  $this->formatService = $this->container->get('formats_service');
}

这给了我一个错误,$this->container似乎是空的。

我无法注入服务,因为要做到这一点,我需要将我的控制器定义为服务,但这样做所以Error: Call to a member function has() on null每当我尝试从控制器访问任何端点时都会给我

有没有什么方法可以将服务注入到控制器中,而不用在 Symfony 2.8 中搞得一团糟?


慕少森
浏览 170回答 2
2回答

宝慕林4294392

将控制器定义为服务时,您必须直接注入服务而无需访问容器。当你的控制器扩展 Symfony 的基本控制器时,你可以采用混合方法,但通常不鼓励这样做。如果您修改控制器的构造函数,它应该可以工作:public function __construct(FormatsBundle\Services\FormatService $formatService)  {     $this->formatService = $formatService; }编辑:如果您想在控制器中使用容器,您应该扩展Symfony\Bundle\FrameworkBundle\Controller\Controller或添加use Symfony\Component\DependencyInjection\ContainerAwareTrait,但在使用控制器作为服务时,不鼓励两者,因为这样您也可以编写常规控制器。

眼眸繁星

当您使用控制器时,您不需要将其声明为服务,因为控制器具有容器,您可以使用 php app/console debug:container来查看您的服务是否在容器中,并且可以直接在操作中使用它public function newAction(){// the container will instantiate a new FormatService() $myService = $this->container->get('formats_service');}
打开App,查看更多内容
随时随地看视频慕课网APP