2011-11-29 9 views
20

Tengo el siguiente en mi config.ymlMueva config servicio de Symfony2 para agrupar

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

pero me gustaría pasar esto a config.yml en mi MySecurityBundle/Resources/config pero Symfony2 me dice que el servicio no existe cuando Lo muevo

¿Cómo puedo obtener el archivo config.yml desde allí?

Respuesta

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

Esto arregló mi problema en un instante. Muchas gracias. –

21

lo logré refiriéndose a ella como una importación en app/config.yml:

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

Este es lo que solía hacer, pero estoy buscando una forma de definir el servicio sin hacer cambios en app/config.yml. ¡Gracias por responder! –

+0

esta debería ser la respuesta aceptada. – giannisf

+0

trabajo en symfony3.4. Gracias :) – Makubex

16

Es necesario crear una clase en ese paquete llamado 'extensión' que le dice a Symfony lo que hay que hacer cuando se carga el paquete. La convención de nombres es un poco extraña. Para Acme \ MySecurityBundle, la clase se llamará AcmeMySecurityExtension. Vive en {bundlepath}/DependencyInjection.

Aquí es un ejemplo de una de las minas (Estoy cargando Resources/config/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'); 
    } 
} 
Cuestiones relacionadas