在 Symfony 2.8 中将服务注入控制器?
Inject service into controller in Symfony 2.8?
我真的很难尝试将服务注入控制器,我发现了一些 post,这就是我尝试过的:
我有一个名为 FormatService 的服务
services:
formats_service:
class: FormatsBundle\Services\FormatService
我希望将它注入 FormatsController
,所以我尝试了 Defining Controllers as Services,然后按照文档所述更改了我的整个路由
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 中,有没有什么方法可以将服务注入到控制器中而不造成一团糟?
当您使用控制器时,您无需将其声明为服务,因为控制器具有 容器,您可以使用 php app/console debug:container 查看您的服务是否在您的容器中,您可以直接将其用于您的操作
public function newAction()
{
// the container will instantiate a new FormatService()
$myService = $this->container->get('formats_service');
}
你可以在这里看到更多https://symfony.com/doc/2.8/service_container.html
将控制器定义为服务时,您必须直接注入服务而不访问容器。当您的控制器扩展 Symfony 的基本控制器时,您可以采用混合方法,但通常不鼓励这样做。
如果您修改控制器的构造函数,它应该可以工作:
public function __construct(FormatsBundle\Services\FormatService $formatService)
{
$this->formatService = $formatService;
}
编辑:如果你想在你的控制器中使用容器,你应该扩展 Symfony\Bundle\FrameworkBundle\Controller\Controller
或添加 use Symfony\Component\DependencyInjection\ContainerAwareTrait
,但是在将控制器作为服务使用时同样不鼓励两者,因为那样你可以也可以编写一个常规控制器。
我真的很难尝试将服务注入控制器,我发现了一些 post,这就是我尝试过的:
我有一个名为 FormatService 的服务
services:
formats_service:
class: FormatsBundle\Services\FormatService
我希望将它注入 FormatsController
,所以我尝试了 Defining Controllers as Services,然后按照文档所述更改了我的整个路由
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 中,有没有什么方法可以将服务注入到控制器中而不造成一团糟?
当您使用控制器时,您无需将其声明为服务,因为控制器具有 容器,您可以使用 php app/console debug:container 查看您的服务是否在您的容器中,您可以直接将其用于您的操作
public function newAction()
{
// the container will instantiate a new FormatService()
$myService = $this->container->get('formats_service');
}
你可以在这里看到更多https://symfony.com/doc/2.8/service_container.html
将控制器定义为服务时,您必须直接注入服务而不访问容器。当您的控制器扩展 Symfony 的基本控制器时,您可以采用混合方法,但通常不鼓励这样做。
如果您修改控制器的构造函数,它应该可以工作:
public function __construct(FormatsBundle\Services\FormatService $formatService)
{
$this->formatService = $formatService;
}
编辑:如果你想在你的控制器中使用容器,你应该扩展 Symfony\Bundle\FrameworkBundle\Controller\Controller
或添加 use Symfony\Component\DependencyInjection\ContainerAwareTrait
,但是在将控制器作为服务使用时同样不鼓励两者,因为那样你可以也可以编写一个常规控制器。