symfony 控制器没有容器集,是否忘记将其定义为服务订户

9avjhtql  于 2022-11-16  发布在  其他
关注(0)|答案(7)|浏览(150)

我试图重构Symfony 5服务器中的一些控制器,但突然无法更改或创建控制器,因为出现以下错误:

  • 'App\Controller{{ControllerName}}'没有容器集,您是否忘记将其定义为服务订户?*

这是控制器:

<?php

namespace App\Controller;

use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
use Symfony\Component\Routing\Annotation\Route;
use Symfony\Component\HttpFoundation\Request;
use App\Entity\Shiftsummary;
use App\Entity\Station;
use App\Entity\Shift;
use App\Entity\Line;
use \Datetime;

class StartStationController extends AbstractController {
    /**
     * @Route("/start", name="StartStation")
     */

    public function route(Request $request)
    {
      ...
    }  }

这是 service.yaml 的内容

services:
    _defaults:
        autowire: true  
        autoconfigure: true 

    App\:
        resource: '../src/*'
        exclude: '../src/{DependencyInjection,Entity,Migrations,Tests,Kernel.php}'

    App\Controller\:
        resource: '../src/Controller'
        tags: ['controller.service_arguments']

控制器位于 src/controller/ 文件夹中

m1m5dgzv

m1m5dgzv1#

该问题与缓存文件有关,删除/var/cache可使错误不再发生。
谢谢Cerad指出这一点。

13z8s7eq

13z8s7eq2#

我必须补充一点,如果您设置了错误的名称空间,也会得到以下错误:

// src/Controller/Api/ProductController.php

namespace App\Controller;

class ProductController extends AbstractController {}

命名空间必须遵循文件夹结构

namespace App\Controller\Api;
bf1o4zei

bf1o4zei3#

这就是问题所在,您控制器没有注入容器但是,如果您控制器继承自AbstractController,则框架希望注入容器
在控制器解析器.php中:

TLDR;您需要的是注入它。

在services.yaml中,添加以下setter调用

jhkqcmku

jhkqcmku4#

在我的例子中,类只是有一个与文件不同的名称。

6rvt4ljy

6rvt4ljy5#

您必须更改:

namespace App\Controller;

与:

namespace App\Controller\Api;
wz1wpwve

wz1wpwve6#

在我的例子中,当我使用bin/console命令时,控制器名称中出现了错误:
bin/console make:controller APIController此命令自动将后缀-Controller添加到文件中。
然后创建的控制器称为APIControllerController
接下来,我复制/粘贴Auth 0指南以创建命名为APIController的API。
最后,文件名为APIControllerController.php,类为APIController:您只需更改文件名并删除重复的-Controller后缀。
或者 -一般情况下- 验证文件控制器的名称和类名;)

h5qlskok

h5qlskok7#

我刚刚解决了这个问题。
原来对我来说--我曾错过键入__construct()作为私有函数,应该是公有的

相关问题