Symfony 寄存器依赖注入(DI)扩展

Symfony 寄存器依赖注入(DI)扩展,symfony,Symfony,为了自动检测到一个DI扩展名,我尝试遵循,只是在我的项目中,我没有用Bundle作为文件夹的前缀,我想我需要手动注册扩展名 这是我的树文件夹结构,我刚刚在其中创建了这个appcontextension portal/src/Common └── 基础设施 └── 西蒙尼 ├── 控制器 └── 依赖性注射 └── AppContextExtension 那么,您知道如何将此扩展注册到容器中以使转储处于活动状态吗??为什么扩展没有自动注册 事实上,解决方案是在AppKernel中注入扩展类,因为

为了自动检测到一个DI扩展名,我尝试遵循,只是在我的项目中,我没有用
Bundle
作为文件夹的前缀,我想我需要手动注册扩展名

这是我的树文件夹结构,我刚刚在其中创建了这个
appcontextension

portal/src/Common
└── 基础设施
└── 西蒙尼
├── 控制器
└── 依赖性注射
└── AppContextExtension


那么,您知道如何将此扩展注册到容器中以使
转储
处于活动状态吗??为什么扩展没有自动注册

事实上,解决方案是在AppKernel中注入扩展类,因为可以使用
Kernel::build()
加载扩展


感谢@Cerad帮助我找到了方向。

事实上,解决方案是在AppKernel中注入扩展类,因为可以使用
Kernel::build()
加载扩展


感谢@Cerad如何帮助我找到了自己的路。

我想我们在这里迷失了方向,但我想这可能就是你想要的例子

# portal/src/Symfony 
# could have been portal/src/Portal/Common/Infrastructure/Symfony
# but I got lazy
namespace Portal\Common\Infrastructure\Symfony;

use Portal\Common\Infrastructure\Symfony\DependencyInjection\AppContextExtension;
use Symfony\Component\HttpKernel\Bundle\Bundle;

# I suppose SymfonyBundle might be a better name 
class PortalBundle extends Bundle
{
    public function getContainerExtension()
    {
        return new AppContextExtension();
    }
}
分机

namespace Portal\Common\Infrastructure\Symfony\DependencyInjection;

use Symfony\Component\DependencyInjection\ContainerBuilder;
use Symfony\Component\DependencyInjection\Extension\Extension;

class AppContextExtension extends Extension
{
    public function load(array $configs, ContainerBuilder $container)
    {
        dump('it work');die;
    }
}
config/bundles.php

Portal\Common\Infrastructure\Symfony\PortalBundle::class => ['all' => true],
composer.json

"autoload": {
    "psr-4": {
        "App\\": "src/",
        "Portal\\Common\\Infrastructure\\Symfony\\": "portal/src/Symfony/"
    }
},
这一切都按预期进行,但您对autowire的评论使我怀疑您正在尝试完全执行其他操作。Autowire通常用于应用程序定义的服务。您不会自动关联捆绑包


享受吧

我想我们在这里有点迷路了,但我想这就是你要的例子

# portal/src/Symfony 
# could have been portal/src/Portal/Common/Infrastructure/Symfony
# but I got lazy
namespace Portal\Common\Infrastructure\Symfony;

use Portal\Common\Infrastructure\Symfony\DependencyInjection\AppContextExtension;
use Symfony\Component\HttpKernel\Bundle\Bundle;

# I suppose SymfonyBundle might be a better name 
class PortalBundle extends Bundle
{
    public function getContainerExtension()
    {
        return new AppContextExtension();
    }
}
分机

namespace Portal\Common\Infrastructure\Symfony\DependencyInjection;

use Symfony\Component\DependencyInjection\ContainerBuilder;
use Symfony\Component\DependencyInjection\Extension\Extension;

class AppContextExtension extends Extension
{
    public function load(array $configs, ContainerBuilder $container)
    {
        dump('it work');die;
    }
}
config/bundles.php

Portal\Common\Infrastructure\Symfony\PortalBundle::class => ['all' => true],
composer.json

"autoload": {
    "psr-4": {
        "App\\": "src/",
        "Portal\\Common\\Infrastructure\\Symfony\\": "portal/src/Symfony/"
    }
},
这一切都按预期进行,但您对autowire的评论使我怀疑您正在尝试完全执行其他操作。Autowire通常用于应用程序定义的服务。您不会自动关联捆绑包


享受

Hmmm。您使用的是什么Symfony版本?如果你仍然有一个app/AppKernel,那么你需要做一个捆绑包。较新版本有一个src/Kernel.php文件来启动。您仍然可以保留现有布局。只需要在您的bundle类文件中显式指定扩展类。非常感谢您为我提供的解决方案:)我非常感谢您的帮助。顺便说一句,您可以发布一个解决方案,我会接受它并投赞成票,还有一些事情我不明白,通常我的AppContextExtension是自动注册的,因为在我的services.yml
autoconfigure:true
autowire:true
下,我的所有类都注册为服务…为什么在我的情况下AppContext类没有自动注册!!在容器中定义服务和在引导过程中的正确点调用服务之间有很大区别。Hmmm。您使用的是什么Symfony版本?如果你仍然有一个app/AppKernel,那么你需要做一个捆绑包。较新版本有一个src/Kernel.php文件来启动。您仍然可以保留现有布局。只需要在您的bundle类文件中显式指定扩展类。非常感谢您为我提供的解决方案:)我非常感谢您的帮助。顺便说一句,您可以发布一个解决方案,我会接受它并投赞成票,还有一些事情我不明白,通常我的AppContextExtension是自动注册的,因为在我的services.yml
autoconfigure:true
autowire:true
下,我的所有类都注册为服务…为什么在我的情况下AppContext类没有自动注册!!在容器中定义服务和在启动过程中的正确点调用服务之间有很大的区别。请您向我解释这两行“App\\”:“src/”,“Portal\\Common\\Infrastructure\\Symfony\\”:“Portal/src/Symfony/”您能向我解释这两行“App\\”:“src/”吗,“Portal\\Common\\Infrastructure\\Symfony\\”:“Portal/src/Symfony/”