2 回答
TA贡献1801条经验 获得超16个赞
services:
_defaults:
autowire: true
autoconfigure: true
"\\":
resource: '../legacy/Controller'
tags: ['controller.service_arguments']
命名空间不是有效的 PSR-4 前缀
services:
_defaults:
autowire: true
autoconfigure: true
"":
resource: '../legacy/Controller'
tags: ['controller.service_arguments']
命名空间前缀必须以“\”结尾
// in Kernel::configureContainer()
$container->registerForAutoconfiguration(\BaseController::class);
(我\BaseController只有Symfony\Component\HttpFoundation\RequestStack作为__construct-argument)
控制器“BaseController”具有必需的构造函数参数,并且在容器中不存在。您是否忘记定义这样的服务?
// in Kernel::configureContainer()
$container->registerForAutoconfiguration(\Controller_Legacy::class);
无法加载资源“4208ad7faaf7d383f981bd32e92c4f2f”。
我不知道如何做到这一点。🙏感谢您的帮助。
TA贡献1951条经验 获得超3个赞
好的,我在原始问题中添加了导致此结果的步骤。对我来说,这个解决方案有效。这可能不是最好的,但确实有效。(尽管开放以获得更好的建议)。
在Kernel.php我滥用作曲家自动加载器来获取我需要的类并将它们注册为服务。由于未使用的服务将被删除,我没有问题:-)
protected function configureContainer(ContainerBuilder $container, LoaderInterface $loader): void
{
/** @var ClassLoader $classLoader */
$classLoader = require $this->getProjectDir().'/vendor/autoload.php';
foreach (array_keys($classLoader->getClassMap()) as $class) {
$definition = (new Definition($class))
->setAutowired(true)
->setAutoconfigured(true)
->setPublic(false);
$container->setDefinition($class, $definition);
}
// Since my ClassMap contains not only controllers, I add the 'controller.service_arguments'-Tag
// after the loop.
$container
->registerForAutoconfiguration(\BaseController::class)
->addTag('controller.service_arguments');
// ...
}
- 2 回答
- 0 关注
- 120 浏览
添加回答
举报