Symfony AppExtension 未加载

cnm*_*cha 2 php symfony symfony4

我将 Symfony 4 与预配置的“App”-Bundle(名称中没有“Bundle”)一起使用,并添加了如下扩展名。访问路由时,不会输出扩展的调试输出,因此扩展逻辑未运行。为什么?我没有在任何地方注册扩展,只是按照http://symfony.com/doc/current/bundles/extension.html 上的手册进行操作。

<?php
namespace App\DependencyInjection;

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

class AppExtension extends Extension
{
    public function __construct()
    {
        echo "EXTLOAD000|";
    }

    /**
     * {@inheritDoc}
     */
    public function load(array $configs, ContainerBuilder $container)
    {
        echo "EXTLOAD|";
        $configuration = new Configuration();
        $config = $this->processConfiguration($configuration, $configs);
        $container->setParameter('app_transformer_configuration', $config['transformer_configuration']);
    }
}
Run Code Online (Sandbox Code Playgroud)

除调试外的代码来自此站点:https : //blog.bam.tech/developper-news/make-a-versioned-api-with-symfony (Symfony 2.7)

Cer*_*rad 5

更新:我这样做很困难。可以使用 Kernel::build() 加载扩展

// src/Kernel.php
protected function build(ContainerBuilder $container): void
{
    $container->registerExtension(new AppExtension());
}
Run Code Online (Sandbox Code Playgroud)

其余的现在可以忽略,尽管我将它保留在这里只是因为我花时间输入它。

注册您的 AppExtension 的方法是创建一个 AppBundle。这只是一个简单的类。

// src/AppBundle.php
namespace App;

use Symfony\Component\HttpKernel\Bundle\Bundle;

class AppBundle extends Bundle
{

}
Run Code Online (Sandbox Code Playgroud)

注册它:

// config/bundles.php
return [
    Symfony\Bundle\FrameworkBundle\FrameworkBundle::class => ['all' => true],
    Symfony\Bundle\WebServerBundle\WebServerBundle::class => ['dev' => true],
    App\AppBundle::class => ['all' => true],
];
Run Code Online (Sandbox Code Playgroud)

然后你的扩展名将被调用:

// src/DependencyInjection/AppExtension.php
namespace App\DependencyInjection;

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

class AppExtension extends Extension
{
    public function load(array $configs, ContainerBuilder $container)
    {
        die('load');
    }
}
Run Code Online (Sandbox Code Playgroud)

我想这就是你所要求的。仍然不清楚为什么您需要为 S4 应用程序执行此操作,但这没关系。