首页 文章

symfony中的构造函数注入

提问于
浏览
2

我想在我的构造函数中使用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;

    }

}

1 回答

  • 0

    根据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
    

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

相关问题