De manera predeterminada, sólo puedes utilizar las anotaciones proporcionadas en tus controladores que no son servicios; Ningún otro directorio es escaneado.
Sin embargo, si también quisieras utilizar anotaciones para configurar tus servicios normales, puedes configurar más ubicaciones como se muestra más adelante.
Si quisieras configurar los servicios en un paquete propio vía anotaciones, o tienes algunos servicios externos a cualquier estructura de paquete tal como en tu directorio src/, lo puedes hacer usando las siguientes opciones de configuración, de modo que el paquete las elegirá, y añadirá a tu contenedor de inyección de la dependencias:
jms_di_extra:
locations:
all_bundles: false
bundles: [FooBundle, AcmeBlogBundle]
directories: ["%kernel.root_dir%/../src"]
<jms-di-extra>
<locations all-bundles="false">
<bundle>FooBundle</bundle>
<bundle>AcmeBlogBundle</bundle>
<directory>%kernel.root_dir%/../src</directory>
</locations>
</jms-di-extra>
Truco
Para optimo rendimiento de desarrollo (en producción no hay ninguna diferencia de cualquier manera), es recomendable configurar explícitamente los directorios que se tendrían que escanear buscando clases de servicio, y no confiar en la opción de configuración all_bundles.
Este paquete te permite configurar la inyección de ciertas propiedades y métodos de controladores automáticamente. Esto es más útil para servicios necesarios comúnmente, los cuales a partir de entonces no se necesita anotarlos explícitamente.
jms_di_extra:
automatic_controller_injections:
properties:
request: "@request"
router: "@router"
method_calls:
setRouter: ["@router"]
<jms-di-extra>
<automatic-controller-injections>
<property name="request">@request</property>
<property name="router">@router</property>
<method-call name="setRouter">@router</method-call>
</automatic-controller-injections>
</jms-di-extra>
Si tu controlador tiene alguna de las propiedades o métodos anteriores, entonces nunca más tendrás que añadir una anotacion @Inject, sino que automáticamente se inyectará el servicio que hayas configurado. No obstante, si declaras una anotación @Inject, esta automáticamente sustituye cualquier cosa que hayas configurado en la sección anterior.