Ich versuche, einen Parameter dynamisch in Symfony2 zu setzen (das kann ich nicht statisch in meiner parameters.yml
Datei setzen). Mein Ansatz ist die Verwendung eines EventListener
:
Und meine Service Definition in config.yml
sieht so aus:
Das Problem ist, ich bekomme eine Ausnahme:
LogicException: Unmöglich, set () auf einem eingefrorenen ParameterBag aufzurufen.
Wie kann ich diese Ausnahme umgehen oder sehen Sie eine andere Möglichkeit, einen Parameter dynamisch zu setzen?
Die Regel der Containerparameter lautet:
Sie können nur einen Parameter festlegen, bevor der Container kompiliert wird
Wie Sie das Problem beheben können, hängt von Ihren Anforderungen ab, mit der Prämisse, dass der Container keine dynamischen Parameter hat.
erstellen Sie benutzerdefinierte dynamische "Optionen" -Service und injizieren es in anderen Diensten, auf diese Weise können Sie auch Ihre Parameter in der Datenbank verwalten (wie Wordpress wp_options), aber ich kenne kein Bündel, das dies tun. Für bestehende Dienste (zB Mailer) können Sie Konfiguratoren verwenden .
macht den Cache ungültig, wenn sich Parameter ändern hier eine einfache Methode Wenn Sie die Seite neu laden, wird der Container neu erstellt. Wenn sich die Parameter häufig ändern, besteht die Gefahr, dass der Cache häufig neu geladen wird, und dies wird zu einem Problem, wenn Sie große Lasten haben.
Wenn Sie die zweite Option auswählen, müssen Sie die Parameter festlegen, bevor sie in den Container eingegeben werden. Sie können also:
Ich empfehle jedoch Option 1 (Optionsservice und Konfiguratoren), weil (ich wiederhole) der Container keine dynamischen Parameter hat, aber es bietet die Möglichkeit, benutzerdefinierte dynamische Service-Konfiguratoren zu haben, die Daten aus jeder Quelle verwenden.
Ich hatte das Problem in einer Liste von URLs, die mit %base_url%
begannen, als ich ein Failover-System machen wollte.
Ich habe schließlich %base_url%
durch #base_url#
ersetzt und eine manuelle Platzhalterauflösung in einem Service durchgeführt.
Tags und Links service kernel symfony listener before-filter