Arquitectura y petición · Pregunta 9 de 12

Un controlador requiere un GeocoderInterface en su constructor. La extensión contiene dos implementaciones, OpenStreetMapGeocoder y GoogleGeocoder. El contenedor informa de un error. ¿Cómo se define la implementación por defecto?

2 respuestas son correctas. Medio

Mostrar solución

Solución

  • A Definir un alias en Services.yaml: Vendor\MyExt\Geocoder\GeocoderInterface: '@Vendor\MyExt\Geocoder\OpenStreetMapGeocoder'
  • B Añadir el atributo #[AsAlias(GeocoderInterface::class)] a la clase OpenStreetMapGeocoder

Explicación

Si hay exactamente una implementación, Symfony la vincula automáticamente a la interfaz al cargar las clases. Con dos candidatas, el contenedor no sabe cuál usar y se detiene. Un alias responde precisamente a esa pregunta, ya sea con #[AsAlias] (Symfony DependencyInjection) directamente en la clase o en Services.yaml. public: true solo hace que un servicio pueda obtenerse desde fuera, y SingletonInterface solo controla si makeInstance reutiliza una instancia.

Certificaciones y exámenes

¿Qué examen viene después?

Ya puedes practicar 19 exámenes y 21 están en votación. Mira todas las certificaciones con información oficial, vota o propón tu examen.

Ver todas las certificaciones