繁体   English   中英

symfony中的构造函数注入

[英]constructor injection in symfony

我想在构造函数中使用Request类,这是在我想运行服务器时给我的错误:

无法自动装配服务“ AppBundle \\ Controller \\ DetectServiceDetailController”:方法“ __construct()”的参数“ $ request”引用类“ Symfony \\ Component \\ HttpFoundation \\ Request”,但不存在这样的服务。 由于它来自其他根名称空间,因此无法自动注册。

我的代码:

<?php

namespace AppBundle\Controller;

use Symfony\Component\HttpFoundation\Request;

class DetectServiceDetailController
{
    public $request;

    public function __construct(Request $request)
    {
        $this->request = $request;
        $serviceType = $this->request->query->get('type');
        return $serviceType;

    }

}

根据gp_sflover的建议,这是我在Symfony 3.4中使用的一段代码:

<?php

namespace AppBundle\Controller;

use Symfony\Bundle\FrameworkBundle\Controller\Controller;
use Symfony\Component\HttpFoundation\RequestStack;

class BaseController extends Controller
{
    protected $request;

    /**
     * @param Symfony\Bundle\FrameworkBundle\Controller\Controller
     */
    public function __construct(RequestStack $requestStack)
    {
        $this->request = $requestStack->getCurrentRequest();
    }

    ...

在我的案例中,BaseController扩展了Controller,因此我不需要更新services.yml,但是如果这是独立的服务,则需要将其添加到services.yml中,例如

services:
    ...
    service_name:
        class: AppBundle\Service\ServiceName
        arguments:
            - '@request_stack'
        public: true

只是为经验不足的开发人员添加它;-)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM