Digital First: Loading

Symfony
4
und
Flex:
Erkenntnisse
beim
Migrieren
auf
die
neue
Struktur

Symfony Blogbild

Jedes Symfony Projekt wird früher oder später auf die neue Symfony Flex Struktur angepasst werden. Hier sind einige meiner Erkenntnisse dazu. Als Symfony Entwickler findet man schnell die Dokumentation zum Upgrade auf Flex. Diese ist jedoch sehr allgemein und geht nicht auf diverse Details ein.

Konfiguration

Vor der Änderung gab es eine Datei im Symfony Projekt, welche die komplette Konfiguration geladen hat. So konnte man die Konfiguration nur aufteilen, indem man weitere Dateien importierte. Dies lässt sich prinzipiell auch mit der neuen Struktur so umsetzen, ist aber eigentlich nicht der gewünschte Weg. Stattdessen sollte die Konfiguration für die einzelnen Bundles aufgeteilt werden. Meine Vorgehensweise dazu war:

  • Bundles über Symfony Flex neu installieren, wodurch die Standardkonfiguration dieser erstellt wird und zwar gleich mit dem dafür vorgesehenen Namen.
  • Danach habe ich diese mit den Werten der ursprünglichen Konfiguration angepasst.

Services

Die Services der Applikation werden wie gehabt über eine Datei definiert, sie muss nur entsprechend verschoben werden. Für Bundles werden diese äquivalent zur Konfiguration verwaltet.

Routen

Für Routen gibt es jetzt einen eigenen Ordner, wo man diese auf mehrere Dateien sinnvoll aufteilen kann.

Variablen

Für variable Werte sollte man in Symfony Flex anstatt wie bisher mit Parametern zu arbeiten, diese über Umgebungsvariablen bereitstellen. Symfony stellt eine Komponente bereit, mit der man diese über eine .env Datei für die Applikation setzen kann. Die Grundidee dazu ist, in der Entwicklung damit zu arbeiten, um die Werte einfach ändern zu können und auf Produktivsystemen tatsächlich die Umgebungsvariablen zu setzen.
Darum haben wir uns im Team dazu entschlossen auch am Produktivsystem mit der .env Datei zu arbeiten:

  • Sie ist von unserer Seite aus einfacher wartbar 
  • Alle Variablen sind an einer Stelle zu finden 
  • Sie befindet sich direkt im Ordner der Applikation 
  • Man muss nicht erst herausfinden, wo diese am entsprechenden System gesetzt werden

Zusätzlich kann eine Beispiel-Datei im Git hinzugefügt werden, diese muss dan nur kopiert und entsprechend angepasst werden. Mit dieser Datei wird dann auch gesetzt, um welche Applikations-Umgebung es sich handelt. Das hat zur Folge, dass auch die Symfony Console die richtige Applikations-Umgebung verwendet, ohne dies extra angeben zu müssen.

Symfony 4.1: Unit Tests und Variablen

Um Variablen bei Unit-Tests bereitstellen zu können, werden diese standardmäßig direkt in der Konfigurationsdatei für die Tests angegeben. Diese Variablen müssen dann allerdings an unterschiedlichen Stellen warten und wenn man hier dann auch die Symfony Console ausführen muss, fehlen Parameter.

Stattdessen haben wir hierfür eine eigene .env Datei für Testzwecke ins Git gegeben, welche über ein kleines PHP Skript über die Konfiguraitondatei für Tests geladen wird – ähnlich wie in der Symfony Console. Wenn man hierfür auch eine Unterscheidung zwischen einer Distribution-Datei und einer lokalen Version macht, kann man diese Werte je nach System einfach anpassen.

Symfony 4.2: Variablen

Mit Symfony 4.2 ändert sich die Verwaltung der Variablen über .env Dateien minimal, da auch neue Funktionen hinzukommen. Unter anderem werden die Variablen dann automatisch bei Unit Tests berücksichtigt und eigene Variablen pro Umgebung können direkt definiert odert überschrieben werden. Außerdem ändert sich die Namensstruktur ein wenig. Näheres hierzu finden Sie hier.

Namespace für Klassen

Das AppBundle wurde entfernt, womit jetzt alle Klassen direkt im src liegen und als Namespace wird standardmäßig App und für Tests App\Tests verwendet. Für dieses Umbenennen nimmt man am besten die Funktion der IDE her. Man muss dies auch im composer.json noch die autoload Konfiguration entsprechend anpassen. Wenn die Applikation eine gute Test-Coverage hat, lässt sich danach einfach feststellen, ob das Umbenennen Probleme verursacht hat oder nicht.

Bundles

Die zu ladenden Bundles werden jetzt nicht mehr direkt im Applikations-Kernel definiert. Es gibt jetzt eine Konfigurationsdatei, wo angegeben wird für welche Umgebungen ein Bundle geladen wird.

Applikationsspezifische Konfiguration und Compiler Passes

Nachdem es in der neuen Struktur kein AppBundle mehr gibt, wird dies jetzt direkt im Kernel definiert.

Custom Mappings für Doctrine Entities

Aufgrund des fehlenden AppBundles, werden Custom Mappings für Doctrine Entities nicht mehr wie gehabt automatisch ausgelesen, sondern entsprechend dieser Anleitung definiert.

Templates

Für Templates gibt es jetzt einen eigenen Ordner. Templates von verwendeten Bundles kann man auch direkt darüber überschreiben, siehe Dokumentation. Es kann jedoch sein, dass dies bei manchen der existierenden Bundles noch nicht funktioniert. Der Grund ist, dass diese dann die Templates über eine eigene Logik laden, welche die neuen Ordner noch nicht richtig berücksichtigt. Das sollte aber mit Updates behoben werden.

Fazit

Ich finde die Änderungen gut, da sie für mehr Übersichtlichkeit sorgen. Ja, es war auch vorher schon möglich die Konfiguration mehrfach aufzuteilen, aber jetzt ist dies einfacher und standardmäßig bei neu installierten Bundles der Fall. Es ist jedoch mit etwas Aufwand verbunden die Struktur bei einem existierenden Projekt entsprechend anzupassen. Bei einem neuen Projekt sollte man natürlich gleich mit der neuen Struktur starten.

Diskutieren Sie mit uns auf Facebook und Twitter . Natürlich freuen wir uns auch über ein E-Mail von Ihnen.

Mehr Blogartikel zum Thema:

loading
Nach oben
 

Hallo!
Sie möchten mit uns zusammenarbeiten? 

Welche Themen sind für Sie interessant?

ICH

Erzählen Sie uns doch bitte ganz kurz worum es geht.

ICH

Gerne würden wir mehr darüber erfahren! Wie dürfen wir Sie denn kontaktieren?

Wie dürfen wir Sie denn kontaktieren?


ICH

An welche Addresse sollen wir die Mail schicken?

Unter welcher Nummer sind Sie am besten erreichbar?

Leider sind zur Zeit alle MASSIVE DOVES auf Urlaub ;) Wollen Sie uns alternativ vielleicht eine Telefonnummer oder E-Mail Adresse hinterlassen, unter der Sie erreichbar sind?

ICH

Bitte geben Sie eine gültige E-mail Adresse ein.


Verraten Sie uns noch Ihren Namen?

ICH

Zum Schluss noch etwas Bürokratie #DSGVO:

Vielen Dank für Ihre Anfrage! Wir werden uns so rasch wie möglich bei Ihnen melden.

Es ist etwas schiefgelaufen.
Bitte lade die Seite neu und versuch es noch einmal.