文档章节

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

汤汤圆圆
 汤汤圆圆
发布于 2015/12/12 09:42
字数 298
阅读 36
收藏 0

###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';
    }
}

© 著作权归作者所有

汤汤圆圆

汤汤圆圆

粉丝 11
博文 82
码字总数 26299
作品 0
昌平
程序员
私信 提问
JVM笔记11-类加载器和OSGI

一.JVM 类加载器: 一个类在使用前,如何通过类调用静态字段,静态方法,或者new一个实例对象,第一步就是需要类加载,然后是连接和初始化,最后才能使用。 类从被加载到虚拟机内存中开始,到...

狂小白
2018/08/06
0
0
OSGi 中的 Declarative Services 规范简介

Declarative Services简介 Declarative Services 是一个面向服务的组件模型,它制订的目的是更方便地在 OSGi 服务平台上发布、查找、绑定服务,对服务进行动态管理,如监控服务状态以及解决服...

银月光海
2015/08/31
243
0
用 Eclipse 构建轻量级的 OSGi 应用程序

简介: OSGi 一直是在 Java™ 领域及诸多其他领域中构建动态模块系统的实际行业标准。本文通过一系列相关示例展示在 Eclipse 中开发 OSGi 应用程序的过程、场景、解决方案和实践。深入阅读本...

IBMdW
2012/01/29
1K
1
深入Parcel--架构与流程篇

本篇文章是对 的源码解析,代码基本架构与执行流程,带你了解打包工具的内部原理,在这之前你如果对 不熟悉可以先到 Parcel官网 了解 介绍 下面是偷懒从官网抄下来的介绍: 极速零配置Web应用...

李13
04/02
0
0
Symfony2.5 如何安装第三方Bundle

1.添加Composer依赖包 Symfony中使用的依赖包管理工具是Composer,我们在开始安装某个bundle之前,先到这个bundle对应的packagist (Packagist是Composer的官方仓库,所有用Composer管理的包...

晓军知了
2018/06/26
0
0

没有更多内容

加载失败,请刷新页面

加载更多

大厂面试经:高频率JVM面试问题整理!

JVM(Java虚拟机)简单来说就是运行Java代码的解释器,作为螺丝钉程序员JVM其实了解下就差不多啦,不懂JVM内部细节照样能写出优质的代码!但是一到造火箭、飞机的场景(面试)不懂JVM的你,会...

架构文摘
29分钟前
7
0
thinkphp5.1学习过程五——request

<?phpnamespace app\index\controller;//use \think\facade\Request;use \think\Request;/** * Class Demo3 * @package app\index\controller * 正常情况下,控制器不依赖......

大海yht
39分钟前
6
0
DB2 sequence 操作

操作DB2 下 sequence seqName db2数据库一般seq还是比较大的,但是程序在调用的时候还是不可避免的有一些bug, 下面是对于seq一些简单的操作,也作为工作的一些记录 1、命令行取sequence se...

飞雪无痕
今天
7
0
《吊打面试官》系列-秒杀系统设计

你知道的越多,你不知道的越多 点赞再看,养成习惯 GitHub上已经开源 https://github.com/JavaFamily 有一线大厂面试点脑图和个人联系方式,欢迎Star和指教 絮叨 之前写了很多Redis相关的知识...

敖丙
今天
15
0
Qt编写气体安全管理系统11-数据打印

一、前言 在各种软件系统中,数据打印也是常用的功能之一,一般来说会对查询的数据结果导出到excel,还会对查询的数据结果直接打印,在Qt中提供了打印机类QPrinter,在printsupport组件中,可...

飞扬青云
今天
5
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部