我正在扩展 Symfony2 Bundle (FosUserBundle)。在我的扩展包中,我想声明一些新服务,但是尽管我的正确DependencyInjection/SomethingExtension.php
并且services.yml
服务不可访问。
未调用扩展,因此services.yml
未加载。
有谁知道如何实现这样的服务声明?
我正在扩展 Symfony2 Bundle (FosUserBundle)。在我的扩展包中,我想声明一些新服务,但是尽管我的正确DependencyInjection/SomethingExtension.php
并且services.yml
服务不可访问。
未调用扩展,因此services.yml
未加载。
有谁知道如何实现这样的服务声明?
您可以通过在您的 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();
}
}
首先,您已经在 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
显示服务列表。