php - 对类的每次修改都会导致错误“无法声明类,因为该名称已在使用中”
问题描述
我已经为 API 启动了一个 Symfony 项目并创建了我的第一个控制器
# services.yaml
parameters:
services:
_defaults:
autowire: true
autoconfigure: true
App\:
resource: '../src/'
exclude:
- '../src/DependencyInjection/'
- '../src/Entity/'
- '../src/Kernel.php'
- '../src/Tests/'
App\Controller\:
resource: '../src/EndPoints/*'
tags: ['controller.service_arguments']
控制器:
namespace App\Controller;
class RegisterController extends AbstractController {
public function register(Request $request): Response {
//stuff
}
}
我第一次运行它并得到预期的结果。我对它进行了修改RegisterController
,但它因错误而死
编译错误:无法声明类 App\Controller\RegisterController,因为名称已在使用中
如果我进入services.yaml
并保存它(没有修改),我可以使用更新的代码再次运行它。
当我添加并进行测试时,这才刚刚开始发生,doctrine-test-bundle
但我不认为这两件事是相关的。我已经检查了我.env.local
APP_ENV
的开发者。是什么导致缓存意味着我必须重新保存services.yaml
才能使任何更改生效?
解决方案
您正在导入控制器两次。
在这里,您正在导入所有类,但您的控制器并未从自动装配中排除:
App\:
resource: '../src/'
exclude:
- '../src/DependencyInjection/'
- '../src/Entity/'
- '../src/Kernel.php'
- '../src/Tests/'
在这里你再次导入你的控制器类
App\Controller\:
resource: '../src/EndPoints/*'
tags: ['controller.service_arguments']
当容器被编译时,你最终会得到这些类的双重定义。
做就是了:
services:
_defaults:
autowire: true
autoconfigure: true
App\:
resource: '../src/'
exclude:
- '../src/DependencyInjection/'
- '../src/Entity/'
- '../src/Kernel.php'
- '../src/Tests/'
- '../src/EndPoints/'
App\Controller\:
resource: '../src/EndPoints/*'
tags: ['controller.service_arguments']
你会被设置的。
此外,您有一个 PSR-4 不匹配,其中的类src/Endpoints
属于 namespace Controller
。这本身没有问题,但只有在composer.json
正确设置的情况下才会起作用。最好有与命名空间匹配的目录,不要让它变得比应该的更难。
推荐阅读
- go - 带指针的工厂方法多态性
- vb.net - Launch a PowerShell command and then pass it a password
- javascript - 将 Javascript 数组转换为 JSON 文件
- python-3.x - seaborn.catplot 的问题
- c# - How to get reference to a rectangle from List
- linux-kernel - 当 Ubuntu 基因组会话通过桌面快捷方式运行并关闭时,它被 pyinstaller 构建的 linux 应用程序破坏
- java - Custom Collector for Collectors.groupingBy doesn't work as expected
- html - Hiding an image on mobile only using CSS
- sql - 为什么会出现一个不正确的语法错误?
- java - 如何通过将变量传递给 reference.child() 从 Firebase 数据库中检索数据?