1

我正在扩展 Symfony2 Bundle (FosUserBundle)。在我的扩展包中,我想声明一些新服务,但是尽管我的正确DependencyInjection/SomethingExtension.php并且services.yml服务不可访问。

未调用扩展,因此services.yml未加载。

有谁知道如何实现这样的服务声明?

4

2 回答 2

0

您可以通过在您的 Bundle 代码中覆盖 getContainerExtension 来确保调用扩展类(不管任何命名问题)。

namespace Cerad\Bundle\AccountBundle;

use Symfony\Component\HttpKernel\Bundle\Bundle;

use Cerad\Bundle\AccountBundle\DependencyInjection\AccountExtension;

class CeradAccountBundle extends Bundle
{
    public function getContainerExtension()
    {
        return new AccountExtension();
    }
}
于 2013-03-02T14:52:22.193 回答
0

首先,您已经在 AppKernal.php 中启用了您的包。希望你做到了:)

下一个,

您需要创建一个新的“扩展”类来处理该过程。这个类应该存在于你的包的 DependencyInjection 目录中,并且它的名字应该通过用 Extension 替换 Bundle 类名的 Bundle 后缀来构造。例如,AcmeHelloBundle 的 Extension 类将被称为 AcmeHelloExtension

SRC:Doc 所以,它应该看起来像

public function load(array $configs, ContainerBuilder $container)
{
    $configuration = new Configuration();
    $config = $this->processConfiguration($configuration, $configs);

    $loader = new Loader\YamlFileLoader($container, new FileLocator(__DIR__.'/../Resources/config'));
    $loader->load('services.yml');
}

最后,用这个命令行工具调试服务是否加载。

命令行php app/console container:debug显示服务列表。

于 2013-03-02T02:16:25.223 回答