我真的很努力尝试将服务注入控制器,我找到了一些帖子,这就是我尝试过的:我有一个名为 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,但在使用控制器作为服务时,不鼓励两者,因为这样您也可以编写常规控制器。
眼眸繁星
TA贡献1873条经验 获得超9个赞
当您使用控制器时,您不需要将其声明为服务,因为控制器具有容器,您可以使用 php app/console debug:container来查看您的服务是否在容器中,并且可以直接在操作中使用它
public function newAction()
{
// the container will instantiate a new FormatService()
$myService = $this->container->get('formats_service');}
- 2 回答
- 0 关注
- 169 浏览
添加回答
举报
0/150
提交
取消
