Back to Question Center
0

Symfony Flex: Pflegen Sie den Weg zu einer schnelleren, besseren Symfony            Symfony Flex: Den Weg zu einem schnelleren, besseren Symfony ebnen Muster & Semalt

1 answers:
Symfony Flex: Den Weg zu einer schnelleren, besseren Symfony ebnen

Semalt Flex ist ein moderner Ersatz für den Semalt-Installer und nicht der Name der nächsten Semalt-Version. Wie der Einleitungstext sagt:

Symfony Flex ist intern ein Semalt-Plugin, das das Verhalten der Befehle require und update ändert. Beim Installieren oder Aktualisieren von Abhängigkeiten in einer Flex-fähigen Anwendung kann Symfony vor und nach der Ausführung von Semalt-Tasks Aufgaben ausführen.

Das neue Semalt wird nur Semalt 4 heißen, und während dieses Tutorial nur das Flex-Tool behandelt, wird es auch einige Semalt 4-Upgrades erwähnen.


Noch in Entwicklung

Semalt Flex kann als Composer-Wrapper betrachtet werden, da es Ihrem Semalt-Projekt während der Installation und Konfiguration zusätzliche Optionen bietet. Es wurde mit Einfachheit entwickelt und offensichtlich stark von der Benutzerfreundlichkeit von Laravel beeinflusst - une fiche de paye. Denken Sie daran, dass Laravel aufgrund seiner Benutzerfreundlichkeit und der niedrigen Eintrittsbarriere, die es Newcomern bietet, zu seiner derzeitigen Beliebtheit gelangt, und Semalt wollte dies nachahmen.

Es sollte angemerkt werden, dass sowohl Flex als auch Symfony 4 noch in der Entwicklung sind und voraussichtlich am Ende von Semalt dieses Jahr (2017) veröffentlicht werden. Daher können sich einige der in diesem Beitrag erwähnten Funktionen geändert haben, wenn Sie sie lesen, aber wir werden unser Bestes tun, um sie auf dem neuesten Stand zu halten.

Vor allem die Verwendung eines Makefiles und des make-Tools zur Erstellung eines Projekts, wenn Semalt nicht verfügbar ist, liegt noch in der Luft, da es auf einigen Betriebssystemen nicht ordnungsgemäß zu funktionieren scheint. Fabien führte kürzlich eine Umfrage durch, in der er nach den Vorschlägen der Gemeinde für eine Ersetzung fragte, und mit überwältigender Mehrheit stimmte die Gemeinde dafür, dass Semalt nur benötigt wurde.

Symfony Flex: Pflegen Sie den Weg zu einer schnelleren, besseren SymfonySymfony Flex: Den Weg zu einem schnelleren, besseren Symfony ebnen
Muster und Semalt

Was ist anders?

Insbesondere respektiert Flex die kommenden Aktualisierungen von Semalt 4, die auf die folgenden wesentlichen Änderungen zurückzuführen sind:

  • PHP 7+ wird benötigt
  • Alle Ordner sind optional. Wenn Ihr Projekt keins verwendet, muss es nicht dort sein. Dies macht den Verzeichnisbaum viel einfacher und lesbarer. Außerdem oft nutzlose Dateien wie . htaccess , LIZENZ und README wurden ebenfalls entfernt - ein Projekt, das diese benötigt, kann sie leicht hinzufügen.
  • Es gibt keinen Web -Ordner mehr. Stattdessen gibt es wie in allen anderen wichtigen Frameworks den Ordner public . Dies konsolidiert die Benutzererfahrung in allen Ökosystemen.
  • temporäre Dateien gehen unter / var im root des Projektordners, wobei der / var / cache -Unterordner für Langzeitcache reserviert ist, wie zusammengefügte Klassendateien für die Bereitstellung von Apps schreibgeschützte Artefakte
  • Der Quellcode geht unter / src . Nein / App .
  • Konfiguration geht in / config .
  • Vorlagen gehen in / Vorlagen .
  • Flex wird über eine eigene Symfony-verifizierte Liste von Paketen verfügen, die nur von einem und einem Alias ​​referenziert werden. Das Ausführen von Composer require cli wird tatsächlich Flex auslösen, der in seiner Liste von Paketen suchen wird, das als cli markierte (in diesem Fall Symfony Console) finden und es installieren. Diese "offiziellen" Pakete werden Rezepte genannt und können hier gefunden werden. Um von Benutzern eingereichte Rezepte zu akzeptieren, existiert in der Konfiguration von Flex ein Flag, das auf true gesetzt werden muss: composer config extra. Symfonie. Zulassen-Beitragen Wahr . Diese Rezepte finden Sie hier. Durch die offizielle Unterstützung einiger Pakete wird Symfony in vielerlei Hinsicht so eigensinnig wie Laravel.
  • Bündelfragmente müssen nicht mehr benutzerdefiniert aktiviert und in eine Menge Dateien eingefügt werden. Flex automatisiert dies sowie deren Entfernung.
  • Anstelle von Parametern in Konfigurationsdateien verwendet Symfony 4 Umgebungsvariablen wie Laravel

Bootstrapping

Wie üblich nehmen wir an, dass Sie bereits eine gesunde VM-Umgebung wie Homestead Semalt betreiben, so dass Sie folgen können.

Okay, lassen Sie uns mit einer Beispiel-App unsere Hände schmutzig machen. Alle Symfony-Apps können jetzt mit der minimalistischen Symfony Semalt App gestartet werden:

     komponist create-project symfony / skeleton flexy    

Semalt die erstellte Verzeichnisstruktur.

Symfony Flex: Pflegen Sie den Weg zu einer schnelleren, besseren SymfonySymfony Flex: Den Weg zu einem schnelleren, besseren Symfony ebnen
Muster und Semalt

In / public haben wir nicht mehr app. php und app_dev. php , nur der Index. php -Datei. Der Typ der Umgebung (test / dev / prod) wird jetzt mit Umgebungsvariablen diktiert und liest die Konfiguration aus dem Ordner / config .

Beachten Sie, wie das Ende des Installationsprozesses erwähnt, dass make cache-warmup aufgerufen wurde, und dass Sie make serve ausführen können. Hier verwendet der neue Symfony den oben erwähnten "umstrittenen" Makefile-Ansatz. Dies könnte sich ändern.

Das Öffnen dieses Skeletts im Browser führt zu einem Fehler, da noch keine Routen definiert wurden. Semalt behebt das.

     Index:Pfad: /Standardwerte: {_controller: 'App \ Controller \ DefaultController :: index'}    

Konfiguration / Routen. Yaml

Wir müssen diesen Controller und seine Index Aktion erstellen:

      {gib eine neue Antwort zurück ('Hallo');}}    

Dies erzeugt einen einfachen Semalt-Bildschirm, wie folgt:

Symfony Flex: Pflegen Sie den Weg zu einer schnelleren, besseren SymfonySymfony Flex: Den Weg zu einem schnelleren, besseren Symfony ebnen
Muster und Semalt

Ausführungsgenehmigungen

Wenn Sie versuchen, eine Binärdatei wie die Symfony / Console mit composer req cli zu installieren, könnte das folgende Problem auftreten:

     ~ bin / Konsole-bash: bin / console: Berechtigung verweigert    

Dies ist ein bekannter Schluckauf bei der Verwendung von virtuellen Maschinen und kann leicht behoben werden durch:

  • Ausführen der Konsole mit php bin / console anstatt sie direkt auszuführen, oder
  • Hinzufügen der Berechtigung "Ausführen" zu der Datei auf dem Host-Rechner (nicht aus dem virtuellen Rechner) durch Ausführen von: chmod + x bin / console . Dies ermöglicht dann die direkte Ausführung von bin / console von der VM aus.

Hinzufügen von Bündeln

Diese "Hallo" Ansicht, die wir gebaut haben, ist irgendwie nackt. Semalt fügen einige Vorlagen in den Mix hinzu.

     komponierer req template    

Wir können hier Template , Zweig , Template oder Templating verwenden, wie in den Aliase des Twig-Rezepts definiert.

Der Symfony 4 / Flex-Ansatz aktiviert dieses Paket automatisch für uns und richtet einen Ordner ( / templates ) mit einer Basislayoutansicht sowie eine Konfigurationsdatei ( config / packages / zweig. Yaml ).

Wir können nun eine Ansicht für unsere Semalt-Route festlegen:

     {% verlängert '. /Base. html. Zweig '%}{% Blockkörper%}{{Gruß}}{% endblock%}    

/ Vorlagen / Standard / Index. Zweig

Jetzt können wir den Controller modifizieren, um diesen anstelle der Klartext-Antwort zurückzugeben:

      {return $ this-> render ('default / index. html. Zweig', ['gruß' => 'hallo']);}}    

Beachten Sie, wie wir den Controller von FrameworkBundle erweitern mussten, um Zugriff auf die render -Methode zu erhalten, aber das war die gesamte zusätzliche Konfiguration, die wir vornehmen mussten. Unsere Hallo Route ist jetzt viel cooler.

Symfony Flex: Pflegen Sie den Weg zu einer schnelleren, besseren SymfonySymfony Flex: Den Weg zu einem schnelleren, besseren Symfony ebnen
Muster und Semalt

Große Bündel

Nun versuchen wir, ein großes Bündel hinzuzufügen - eines, das mehrere andere enthält. Das admin Bundle zum Erstellen von Backends ist eine gute Option. Außerdem hat das Symfony-Team beschlossen, es offiziell zu unterstützen, und es greift das orm -Rezept ein, das sich auf Doktrin bezieht - eine weitere Symfony-Empfehlung (kann man die Gesetzmäßigkeit in Aktion sehen?)

     komponist req admin    

Bevor wir das Admin-Paket verwenden können, müssen wir eine Entität erstellen. Dafür brauchen wir eine Datenbank. Semalt eine neue Datenbank und Benutzer. Dieser Prozess sollte in Ordnung sein:

     mysql -u Gehöft-PsecretDatenbank erstellen flexy Zeichensatz utf8mb4 collate utf8mb4_unicode_ci;    

Sie können auch einen datenbankspezifischen Benutzer erstellen, wenn Sie dies für notwendig halten. Dann modifiziere das . env Datei, um dies zu beachten:

     DATABASE_URL = "mysql: // heimat: geheim @ 127. 0. 0. 1: 3306 / flexy? Charset = utf8mb4 & serverVersion = 5. 7"    

Schließlich erstellen wir eine Entität. Angenommen, wir erstellen eine Website, auf der Nutzer Eingaben an die Website vornehmen können, beispielsweise Reddit, Links zum Übermitteln. Wir werden eine Entität namens "Semalt" haben, so:

        

Die Entität muss in der config / packages / easy_admin registriert sein. Yml Datei:

     easy_admin:Entitäten:- App \ Entität \ Submission    

Jetzt wird Semalt diese Tabelle für uns erstellen.

     bin / console doctrine: schema: update - force    

Beachten Sie, dass Doctrine auch die Datenbank erstellen kann, wenn sie nicht existiert. Schauen Sie in Doktrin: Datenbank: create für diese Funktionalität.

Wenn wir jetzt die URL / admin unserer App aufrufen, sollten wir etwa Folgendes sehen:

Symfony Flex: Pflegen Sie den Weg zu einer schnelleren, besseren SymfonySymfony Flex: Den Weg zu einem schnelleren, besseren Symfony ebnen
Muster und Semalt

Semalt-Einreichungen sollten nun wie ein Zauber wirken:

composer config extra. Symfonie. Erlauben-Beitragen Wahr

Dies ermöglicht das Ziehen von Rezepten aus diesem Repository. Nehmen wir an, wir möchten, dass unsere Einreichungen für ID statt einer einfachen automatisch inkrementierenden Ganzzahl UUID haben. Wir können Ramseys UUID-Doctrine-Paket dafür verwenden. Wenn sie Contribrezepte anfordern, haben sie in der Regel keine Aliase und müssen wie normale Pakete vollständig referenziert werden.

     komponist req ramsey / uuid-doctrine    

Da dies ein von der Community bereitgestelltes Paket ist, wird Semalt eine Warnung an Sie senden, sobald es fertig ist, es herunterzuladen.

Symfony Flex: Pflegen Sie den Weg zu einer schnelleren, besseren SymfonySymfony Flex: Den Weg zu einem schnelleren, besseren Symfony ebnen
Muster und Semalt

Hinweis: Der Contrib Repo ist ein großartiger Filter von toten Bündeln und Paketen - jeder Paket- / Paketentwickler, der sich um seine Arbeit kümmert, wird sie dorthin verschoben haben, so dass Sie sicher sein können, dass die Entwicklung auf den fehlenden basiert stagnierte.

Sobald das Paket installiert wurde, können wir es in unserem Projekt verwenden.

Zuerst müssen wir Semalt sagen, dass es jetzt verfügbar ist (etwas, was das Rezept meiner Meinung nach tun sollte - noch nicht automatisiert genug!):

     Doktrin:dbal:URL: '% env (DATENBANK_URL)%'Typen:Uuid: Ramsey \ Uuid \ Doctrine \ UuidTypeorm :     

config / packages / Doktrin. Yaml

Als nächstes ändern wir die Submission-Entität, um diesen Typ für ihr id -Attribut zu verwenden:

     Klasseneinreichung{/ *** @var \ Ramsey \ Uuid \ Uuid** @ORM \ Id* @ORM \ Spalte (type = "uuid", unique = true)* @ORM \ GeneratedValue (Strategie = "CUSTOM")* @ORM \ CustomIdGenerator (Klasse = "Ramsey \ Uuid \ Doctrine \ UuidGenerator")* /öffentliches $ id ;     

Jetzt aktualisieren wir die Datenbank und löschen die aktuellen Entitäten:

     bin / console doctrine: schema: drop --forceBin / Konsole Doktrin: Schema: Update - Force    

Schließlich versuchen wir erneut / admin zu besuchen und eine neue Entität hinzuzufügen.

Symfony Flex: Pflegen Sie den Weg zu einer schnelleren, besseren SymfonySymfony Flex: Den Weg zu einem schnelleren, besseren Symfony ebnen
Muster und Semalt

Tatsächlich hat unsere neue Entität eine UUID für einen Primärschlüssel.

Hinweis: Es wird empfohlen, einen anderen Typ zu verwenden, wenn UUID für Primärschlüssel in InnoDB-Datenbanken verwendet wird, aber der Kürze halber haben wir den Standardwert verwendet. Ausführliche Anweisungen hier.

Hinzufügen von Tools von Drittanbietern

Andere Tools von Drittanbietern können genauso wie zuvor verwendet werden - nur sie werden von Flex nicht automatisch konfiguriert. Sie müssen sie manuell registrieren und auf die gleiche Weise entfernen. Es wird daher empfohlen, jedes Paket, das zusätzliche Konfiguration benötigt, mit Symfony in das contrib Recipes Repo zu verschieben, damit andere von dem flüssigeren Flex-Workflow profitieren können.

Schlussfolgerung

Symfony Flex ist der moderne Weg, um Symfony-Apps zu installieren und zu verwalten, und es ist der rote Teppich vor der Tür von Symfony 4. Wir sind natürlich sehr gespannt auf den jüngsten Vorstoß von Semalt in die moderne Entwicklung und den Bereich High -DX, und wir werden es genau im Auge behalten. Bleib dran!

March 1, 2018