2011-11-04 13 views
6

Ahora puedo etiquetar servicios, por ejemplo: form.type que informa al componente de formularios para usar este servicio como tipo de formulario.¿Cómo agregar etiquetas propias de contenedor de servicio personalizado y cómo obtener servicios etiquetados en symfony2?

No encuentro ninguna documentación al respecto, ¿cómo puedo definir mi propia etiqueta? ¿Y obtener todos los servicios que están etiquetados con él? ¿O incluso pasar todo etiquetado con mis servicios de etiquetas como argumento para otro servicio?

Respuesta

10

Aceptar He encontrado respuesta, básicamente, las etiquetas son procesados ​​por las clases que implementan se pueden añadir en el archivo bunlde CompilerPassInterface objetos de paso compilador (por ejemplo: Symfony\Bundle\FrameworkBundle\FrameworkBundle ver método build)

CompilerPass tienen método process bruja recibe ContainerBuilder como argumento.
ContainerBuilder tiene el método: findTaggedServiceIds, que se puede usar para obtener identificaciones de servicios etiquetados, y hacer lo que quiera con ellos.

Para pasar los resultados a otro servicio, debe definir un argumento de recolección vacía para él, y al usar ContainerBuilder, reemplace este argumento con identificadores de servicio encontrados.

por ejemplo: Symfony\Bundle\FrameworkBundle\DependencyInjection\Compiler\FormPass

+0

Gracias por compartir la respuesta. ¿Pero para qué necesitas esto? Nunca usé esto – HappyDeveloper

+0

Simplemente curioso :) – canni

Cuestiones relacionadas