Architektur und Request · Frage 9 von 12

Ein Controller verlangt im Konstruktor ein GeocoderInterface. Die Extension enthält zwei Implementierungen, OpenStreetMapGeocoder und GoogleGeocoder. Der Container meldet einen Fehler. Wie legt man die Standard-Implementierung fest?

2 Antworten sind richtig. Mittel

Lösung anzeigen

Lösung

  • A In der Services.yaml einen Alias anlegen: Vendor\MyExt\Geocoder\GeocoderInterface: '@Vendor\MyExt\Geocoder\OpenStreetMapGeocoder'
  • B Das Attribut #[AsAlias(GeocoderInterface::class)] an die Klasse OpenStreetMapGeocoder setzen

Erklärung

Gibt es genau eine Implementierung, verknüpft Symfony sie beim Laden der Klassen automatisch mit dem Interface. Bei zwei Kandidaten weiß der Container nicht, welchen er nehmen soll, und bricht ab. Ein Alias beantwortet genau diese Frage, entweder per #[AsAlias] (Symfony DependencyInjection) direkt an der Klasse oder in der Services.yaml. public: true macht einen Dienst nur von außen abrufbar, SingletonInterface steuert nur, ob makeInstance eine Instanz wiederverwendet.

Zertifikate & Prüfungen

Welche Prüfung kommt als Nächstes?

19 Prüfungen kannst du schon üben, über 21 stimmst du gerade ab. Sieh dir alle Zertifikate mit offiziellen Infos an, gib deine Stimme ab oder schlag deine Prüfung vor.

Zur Zertifikatsübersicht