为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

PHP
慕少森 2023-08-06 14:32:42
我真的很努力尝试将服务注入控制器,我找到了一些帖子,这就是我尝试过的:我有一个名为 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 中搞得一团糟?
查看完整描述

2 回答

?
宝慕林4294392

TA贡献2021条经验 获得超8个赞

将控制器定义为服务时,您必须直接注入服务而无需访问容器。当你的控制器扩展 Symfony 的基本控制器时,你可以采用混合方法,但通常不鼓励这样做。

如果您修改控制器的构造函数,它应该可以工作:

public function __construct(FormatsBundle\Services\FormatService $formatService) 
{
    $this->formatService = $formatService;
}

编辑:如果您想在控制器中使用容器,您应该扩展Symfony\Bundle\FrameworkBundle\Controller\Controller或添加use Symfony\Component\DependencyInjection\ContainerAwareTrait,但在使用控制器作为服务时,不鼓励两者,因为这样您也可以编写常规控制器。


查看完整回答
反对 回复 2023-08-06
?
眼眸繁星

TA贡献1873条经验 获得超9个赞

当您使用控制器时,您不需要将其声明为服务,因为控制器具有容器,可以使用 php app/console debug:container来查看您的服务是否在容器中,并且可以直接在操作中使用它

public function newAction()

{

// the container will instantiate a new FormatService()
$myService = $this->container->get('formats_service');

}

查看完整回答
反对 回复 2023-08-06
  • 2 回答
  • 0 关注
  • 169 浏览

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号