Die Klasse ist kein Dienst, der im Abhängigkeitsinjektionscontainer registriert ist, sodass er nicht mit den Standardmethoden überschrieben werden kann (Klassenname parameter/compiler pass). Es wird direkt in dem Symfony-Code verwendet, z.B. new MessageCatalogue()
.
Wenn Sie wirklich brauchen, um es zu überschreiben, können Sie dies tun, indem Sie die Klassenposition explizit im Klassenlader festlegen. Klassenkarten haben Vorrang vor PSR-0/PSR-4-Präfixen.
$loader = require __DIR__ . '/../vendor/autoload.php';
$loader->addClassMap([
'Symfony\Component\Translation\MessageCatalogue' => 'path/to/your/override.php',
]);
Die Nachteile sind:
- es ein bisschen hackish ist - ich dies nur als letztes Mittel tun würde
- Sie können die ursprünglichen Klasse nicht verlängern, müssen Sie neu zu implementieren es oder copy-paste den Code
- Sie sich daran zu erinnern, es zu aktualisieren, wenn Sie Symfony aktualisieren
Symphony verwendet Dependency Injection so DI Konfiguration sho verändern ähm, was du suchst. –
welche Version von Symfony? – Jaxian
@MarcinOrlowski 'MessageCatalogue' ist kein in der DI registrierter Dienst, so dass er nicht auf diese Weise überschrieben werden kann. Es gibt direkte Verweise darauf im Code (z. B. "new MessageCatalogue"). – ShiraNai7