symfony 中的构造函数注入

sin*_*ina 5 php 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;

    }

}
Run Code Online (Sandbox Code Playgroud)

Str*_*bek 6

根据 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();
    }

    ...
Run Code Online (Sandbox Code Playgroud)

就我而言,BaseController 扩展了 Controller,因此我不需要更新 services.yml,但如果这是独立服务,那么您需要将其添加到 services.yml 例如

services:
    ...
    service_name:
        class: AppBundle\Service\ServiceName
        arguments:
            - '@request_stack'
        public: true
Run Code Online (Sandbox Code Playgroud)

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