我们正在从 Symfony 2.8 迁移到 Symfony 6.4,并且正在重写升级到新版本所需的必要代码。在我们的旧版本中,我们有通用的存储库和控制器来执行通用任务,这些任务分别从几乎每个存储库和控制器中调用。在公共控制器中,我们正在扩展控制器“class CommonController extends Controller”,在公共存储库中,我们正在扩展实体存储库“class CommonRepository extends EntityRepository”。在所有其他存储库/控制器中,我们只是扩展公共存储库/控制器。我们在旧版本的 services.yml 下声明如下。
services:
bundle.repository.common:
class: Bundle\Repository\CommonRepository
abstract: true
calls:
- [ setContainer, [ @service_container ] ]
但是当我们尝试在新的 symfony 6.4 中做同样的事情时,我们遇到了问题。扩展实现保持不变,下面是从新 symfony 中的 services.yml 添加的代码:
Bundle\Repository\CommonRepository:
abstract: true
arguments: ['@doctrine.orm.entity_manager']
calls:
- setLogger: ['@logger']
在此之后我们收到错误 InvalidArgumentException > LoaderLoadException
从资源“../src/Bundle/Repository”导入服务时,期望在文件“src\Bundle\Repository\ClrRepository.php”中找到类“Bundle\Repository\ClrRepository”,但没有找到!检查 /config/services.yaml 中资源使用的命名空间前缀(从“src\Kernel.php”导入)。
现在我陷入了这一点,我所做的任何更改都会导致错误。
我尝试按照 Symfony 6 更改设置,但没有得到所需的结果。
经过大量搜索和检查,我们终于能够创建通用控制器和存储库。我们不需要加载via服务,遵循通用结构并且能够实现它。