在一个Bundle里如何加载服务配置

###1.创建一个自动加载的扩展类 *. 类在DependencyInjection命令空间下(通常文件位置位于DependencyInjection 目录下) *. 文件的命令是去掉Bundle的名称的后缀Bundle用Extension来替代(eg AppBundle --> AppExtesion)

该类需要实现ExtensionInterface接口;通常通过继承 Extension类来实现

// src/Acme/HelloBundle/DependencyInjection/AcmeHelloExtension.php
namespace Acme\HelloBundle\DependencyInjection;

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

class AcmeHelloExtension extends Extension
{
    public function load(array $configs, ContainerBuilder $container)
    {
        // ... you'll load the files here later
    }
}

###2. 手动注册一个扩展类 如果我们不遵守上面自动加载的约束;我们将要手动注册该扩展类;我们需要重写Bundle的getContainerExtension方法;该方法返回我们的扩展类的实例

use Acme\HelloBundle\DependencyInjection\UnconventionalExtensionClass;

class AcmeHelloBundle extends Bundle
{
    public function getContainerExtension()
    {
        return new CustomerExtension();//自定义的扩展类
    }
}
自定义的扩展类;需要重写getAlias方法返回DI的别名;通常就是去掉Extension后缀的(eg AcmeHelloExtension-->acme_hello)
class CustomerExtension extends Extension
{
    /**
     * {@inheritdoc}
     * load方法所有和extension相关的配置,服务将要被加载
     *
     */
    public function load(array $configs, ContainerBuilder $container)
    {
        //有 YamlFileLoader, PhpFileLoader,IniFileLoader.
        $loader = new Loader\YamlFileLoader($container, new FileLocator(__DIR__.'/../Resources/config'));
        $loader->load('services.yml');
    }

    public function getAlias()
    {
        return 'acme_hello';
    }
}

转载于:https://my.oschina.net/u/729139/blog/543056

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值