2011-11-29 86 views
20

我在config.yml移动Symfony2的服务配置捆绑

services: 
    my.user_provider: 
     class: Acme\MySecurityBundle\Security\UserProvider 

以下,但想动这在我MySecurityBundle/Resources/config到config.yml但Symfony2的告诉我,该服务不存在时我动它。

如何从中获取config.yml文件?

回答

38

src/Acme/MySecurityBundle/DependencyInjection/MySecurityExtension.php

<?php 
namespace Acme\MySecurityBundle\DependencyInjection; 

use Symfony\Component\HttpKernel\DependencyInjection\Extension; 
use Symfony\Component\DependencyInjection\ContainerBuilder; 
use Symfony\Component\DependencyInjection\Loader\YamlFileLoader; 
use Symfony\Component\Config\FileLocator; 

class MySecurityExtension extends Extension 
{ 
    public function load(array $configs, ContainerBuilder $container) 
    { 
     $loader = new YamlFileLoader($container, new FileLocator(__DIR__.'/../Resources/config')); 
     $loader->load('services.yml'); 
    } 
} 

src/Acme/MySecurityBundle/Resources/config/services.yml

services: 
    my_security.user_provider: 
     class: Acme\MySecurityBundle\Security\UserProvider 
+0

这解决了我的问题。非常感谢。 –

21

我完成了这一由app/config.yml引用它作为一个进口:

imports: 
    - { resource: "@MySecurityBundle/Resources/config/services.yml" } 
+3

这是我以前做的,但我正在寻找一种方法来定义服务,而无需更改app/config.yml。谢谢回答! –

+0

这应该是被接受的答案。 – giannisf

+0

在symfony3.4中工作。谢谢:) – Makubex

16

你需要在包称为“扩展”,告诉Symfony的做什么加载软件包时,创建一个类。命名约定有点奇怪。对于Acme \ MySecurityBundle,该类将被命名为AcmeMySecurityExtension。它位于{bundlepath}/DependencyInjection中。

这里是我的一个示例(我加载资源/配置/ services.xml中):

<?php 

namespace Acme\MySecurityBundle\DependencyInjection; 

use Symfony\Component\Config\FileLocator; 
use Symfony\Component\DependencyInjection\ContainerBuilder; 
use Symfony\Component\DependencyInjection\Loader\XmlFileLoader; 
use Symfony\Component\HttpKernel\DependencyInjection\Extension; 

/** 
* This class is automatically discovered by the kernel and load() is called at startup. 
* It gives us a chance to read config/services.xml and make things defined there available for use. 
* For more information, see http://symfony.com/doc/2.0/cookbook/bundles/extension.html 
*/ 
class AcmeMySecurityExtension extends Extension 
{ 
    /** 
    * Called by the kernel at load-time. 
    */ 
    public function load(array $configs, ContainerBuilder $container) 
    { 
     /*@var XmlFileLoader*/ 
     $loader = new XmlFileLoader($container, new FileLocator(__DIR__.'/../Resources/config')); 
     $loader->load('services.xml'); 
    } 
}