我试图重构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/ 文件夹中
7条答案
按热度按时间m1m5dgzv1#
该问题与缓存文件有关,删除/var/cache可使错误不再发生。
谢谢Cerad指出这一点。
13z8s7eq2#
我必须补充一点,如果您设置了错误的名称空间,也会得到以下错误:
命名空间必须遵循文件夹结构
bf1o4zei3#
这就是问题所在,您控制器没有注入容器但是,如果您控制器继承自AbstractController,则框架希望注入容器
在控制器解析器.php中:
TLDR;您需要的是注入它。
在services.yaml中,添加以下setter调用
jhkqcmku4#
在我的例子中,类只是有一个与文件不同的名称。
6rvt4ljy5#
您必须更改:
与:
wz1wpwve6#
在我的例子中,当我使用bin/console命令时,控制器名称中出现了错误:
bin/console make:controller APIController
此命令自动将后缀-Controller
添加到文件中。然后创建的控制器称为
APIControllerController
。接下来,我复制/粘贴Auth 0指南以创建命名为
APIController
的API。最后,文件名为
APIControllerController.php
,类为APIController
:您只需更改文件名并删除重复的-Controller后缀。或者 -一般情况下- 验证文件控制器的名称和类名;)
h5qlskok7#
我刚刚解决了这个问题。
原来对我来说--我曾错过键入__construct()作为私有函数,应该是公有的