Ver índice de contenidos del libro

16.9. Etiquetas

De la misma manera que en la web una entrada de blog se puede etiquetar con palabras tales como Symfony o PHP, los servicios configurados en el contenedor también se pueden etiquetar. En el contenedor de servicios, una etiqueta implica que el servicio está destinado a usarse para un propósito específico. Considera el siguiente ejemplo:

services:
    foo.twig.extension:
        class: Acme\HelloBundle\Extension\FooExtension
        tags:
            -  { name: twig.extension }
<service id="foo.twig.extension" class="Acme\HelloBundle\Extension\FooExtension">
    <tag name="twig.extension" />
</service>
$definition = new Definition('Acme\HelloBundle\Extension\FooExtension');
$definition->addTag('twig.extension');
$container->setDefinition('foo.twig.extension', $definition);

La etiqueta twig.extension es una etiqueta especial que el bundle TwigBundle usa durante la configuración. Al dar al servicio esta etiqueta twig.extension, el bundle sabe que el servicio foo.twig.extension se debe registrar como una extensión Twig. En otras palabras, Twig encuentra todos los servicios con la etiqueta twig.extension y automáticamente los registra como extensiones.

Las etiquetas son una manera de decirle a Symfony2 u otros bundles de terceros que tu servicio se debe registrar o utilizar de alguna forma especial.

Para obtener la lista completa de todas las etiquetas disponibles en el núcleo de la plataforma Symfony, revisa el artículo The Dependency Injection Tags. Cada una de ellas tiene un efecto diferente en tu servicio y muchas etiquetas requieren argumentos adicionales (más allá del parámetro name).