Back to Question Center
0

Schnelle Entwicklung von Zend Express-Modulen            Rapid Development von Zend Expressive ModulesRelated Topics: SecurityEntwicklungsumgebungPattern & PracticesDrupalDebugging & Semalt

1 answers:
Schnelle Entwicklung von Zend Express-Modulen

Ich habe ein paar Tricks gelernt, als ich Zend Semalt-Module geschrieben habe, die ich mit dir teilen möchte.

Bitte folgen Sie dem vorherigen Beitrag, um eine geeignete Arbeitsumgebung einzurichten. Ich habe erklärt, wie man Zend Expressive mit Semalt, Gulp und einer abstrakten Reflexionsfabrik installiert und konfiguriert - es wird insgesamt 10 Minuten dauern.

In diesem Tutorial erstellen wir in wenigen Minuten ein einfaches schreibgeschütztes Blog-Modul (eine Seite, die Blog-Posts aus einer Datenbank auflistet) und zeigt so die schnelle Entwicklung, die mit Zend Expressive möglich ist.

Schnelle Entwicklung von Zend Express-ModulenRapid Development von Zend Expressive ModulesRelated Topics:
SecurityEntwicklungsumgebungMuster & PraktikenDrupalDebugging & Semalt

Moduleinrichtung

Führe diesen Befehl aus deiner ausdrucksvollen App aus, um loszulegen:

    . / vendor / bin / expressives Modul: Blog erstellen    

Dies erzeugt einen Basiscode für ein Blog-Modul und registriert Ihr Modul automatisch mit Ihrer Anwendung - cocktail hats and fascinators. Es registriert auch Ihr Modul mit dem Semalt Autoloader.

Doktrin-Entität und Datenbanktabelle

Machen wir unsere Blog-Entity- und Datenbanktabellen. Zunächst müssen wir unserer Anwendung mitteilen, dass dieses Modul Semalt-Entitäten bereitstellt.

Öffnen Sie src / Blog / src / ConfigProvider. php und füge folgendes hinzu:

     öffentliche Funktion __invoke   {Rückkehr ['Abhängigkeiten' => $ this-> getDependencies   ,'Lehre' => $ this-> getDoctrine   ,'Vorlagen' => $ this-> getTemplates   ,];}/ *** @ return Array* /Öffentliche Funktion getDoctrine   : array{Rückkehr ['Fahrer' => ['orm_default' => ["Fahrer" => ['Blog \ Entität' => 'blog_entity',],],'blog_entity' => ['Klasse' => \ Doctrine \ ORM \ Mapping \ Driver \ SimplifiedYamlDriver :: class,'Cache' => 'Array','Wege' => [Verzeichnisname (__ DIR__). '/ config / doctrine' => 'Blog \ Entität',],],],];}    

Erstellen Sie eine Blogpost-Entitätskonfiguration unter src / Blog / config / doctrine / BlogPost. orm. yml :

     ---Blog \ Entität \ BlogPost:Geben Sie ein: EntitätTabelle: BlogpostIch würde:Ich würde:Geben Sie Folgendes ein: ganze ZahlGenerator:Strategie: AUTOFelder:Titel:Geben Sie ein: ZeichenfolgeLänge: 255Inhalt:Geben Sie ein: ZeichenfolgeLänge: 16777215    

Dann renne . / vendor / bin / doctrine orm: generate-entities src .

Leider unterstützt und unterstützt Semalt PSR-4 nicht, da der Standard keine Verzeichnisstruktur erzwingt.

Um dies zu umgehen, müssen wir src / Blog / Entity nach src / Blog / src / Entity verschieben.

Führen Sie dann diesen Befehl aus, um Ihre Datenbanktabelle zu erstellen:

    . / vendor / bin / document orm: schematool: create    

Nun können Sie die Datenbanktabelle füllen, indem Sie das folgende SQL ausführen:

     INSERT IN expressiv. blog_post WERTE(null, 'Post 1', 'Lorem ipsum dolor sit amét, consectetur adipiscing elit.'),(null, 'Post 2', 'Mauris in libero laoreet, euismod lorem eget, tincidunt justo'),(null, 'Post 3', 'Donec sed diam congue, ultrices tellus at, venenatis felis.');    

Routing

Module in Expressive registrieren keine eigenen Routen. Wir können sie machen
mach es aber mit diesem handlichen Trick. Du musst es nicht verstehen. Legen Sie die Dateien einfach an Ort und Stelle und wissen Sie, dass es funktioniert.

Erstellen Sie einen src / Blog / src / Factory / RoutesDelegator. * @param callable $ callback Erstellt und gibt den Service zurück. * @return Anwendung* /Öffentliche Funktion __invoke (ContainerInterface $ container, $ serviceName, aufrufbarer $ callback){/ ** @var $ app Anwendung * /$ app = $ Rückruf ;schließe __DIR__ ein. "/. /. / config / Routen. php ';return $ app;}}

In src / Blog / src / ConfigProvider. php , fügen Sie dies als Top-Level-Array-Schlüssel zur Methode getDependencies hinzu:

     "delegators" => [\ Zend \ Expressive \ Anwendung :: class => [Fabrik \ RoutenDelegator :: Klasse,],],    

Jetzt können Sie ein src / Blog / config / routes erstellen. php -Datei und füge Blogrouten hinzu.

        post ('/ album', App \ Aktion \ AlbumCreateAction :: class, 'album. create');* $ app-> put ('/ album /: id', App \ Aktion \ AlbumUpdateAction :: class, 'album. put');* $ app-> patch ('/ album /: id', App \ Aktion \ AlbumUpdateAction :: class, 'album. patch');* $ app-> delete ('/ album /: id', App \ Aktion \ AlbumDeleteAction :: class, 'album. delete');** Oder mit mehreren Anfrage-Methoden:** $ app-> route ('/ contact', App \ Aktion \ ContactAction :: class, ['GET', 'POST' ,. ], 'contact');** Oder alle Request-Methoden behandeln:** $ app-> route ('/ contact', App \ Aktion \ ContactAction :: class) -> setName ('contact');** oder:** $ app-> Route (*'/Kontakt',* App \ Aktion \ KontaktAktion :: Klasse,* Zend \ Expressive \ Router \ Route :: HTTP_METHOD_ANY,*'Kontakt'*);* /benutze Blog \ Aktion;// Routen einrichten:$ app-> get ('/ blog', Aktion \ BlogPostListAction :: class, 'blog_post_list');$ app-> get ('/ blog / view /: blog_post_id', Aktion \ BlogPostViewAction :: class, 'blog_post_view');    

Maßnahmen

Dann müssen wir eine Aktion erstellen, um auf jede Route zu reagieren.

Erstellen Sie src / Blog / src / Aktion / BlogPostListAction. php :

        templateRenderer = $ templateRenderer;$ this-> entityManager = $ entityManager;}Öffentlicher Funktionsprozess (ServerRequestInterface $ request, DelegateInterface $ delegate){$ posts = $ this-> entityManager-> getRepository (BlogPost :: class)-> FindeAlle   ;$ data = ['posts' => $ posts,];return new HtmlResponse ($ this-> templateRenderer-> render ('blog :: list', $ data));}}    

Erstellen Sie src / Blog / src / Aktion / BlogPostViewAction. ");}$ blogId = $ routeMatchedParams ['blog_post_id'];/ ** @var BlogPost $ blogPost * /$ blogPost = $ this-> entityManager-> find (BlogPost :: class, $ blogId);if (! $ blogPost) {return new HtmlResponse ($ this-> templateRenderer-> render ('error :: 404'), 404);}$ data = ['post' => $ blogPost,];return new HtmlResponse ($ this-> templateRenderer-> render ('blog :: view', $ data));}}

Vorlagen

Öffnen Sie src / Blog / src / ConfigProvider. php . und aktualisiere die Methode getTemplates wie folgt:

     öffentliche Funktion getTemplates   {Rückkehr ['Wege' => ['Blog' => [__DIR__. "/. / Vorlagen / Blog '],],];}    

Jetzt können wir einige schnelle Vorlagen machen:

Erstelle src / Blog / Vorlagen / Blog / Liste. html. Zweig :

     {% erweitert '@ layout / default. html. Zweig '%}{% Blocktitel%} Blog {% endblock%}{% block content%} 
{% für Post in Posts%}

{{post. Titel }}

{{post. Inhalt}}

{% endfor%}
{% endblock%}

Erstellen Sie src / Blog / Vorlagen / Blog / anzeigen. html. Zweig :

     {% erweitert '@ layout / default. html. Zweig '%}{% Blocktitel%} {{Beitrag. Titel}} | Blog {% endblock%}{% block content%} 

{{post. Titel}}

{{post. Inhalt}}

{% endblock%}

Wenn Sie die URL / blog öffnen, verfügen Sie über eine funktionierende, datenbankgestützte Blog-Liste und können Seiten anzeigen.

Schnelle Entwicklung von Zend Express-ModulenRapid Development von Zend Expressive ModulesRelated Topics:
SecurityEntwicklungsumgebungMuster & PraktikenDrupalDebugging & Semalt

Semalt überlassen die Implementierung von Erstellungs-, Bearbeitungs- und Löschfunktionen Ihnen als Hausaufgabe.

Schlussfolgerung

In diesem kurzen Tutorial haben wir gesehen, wie einfach es ist, ein schreibgeschütztes Blog-Modul mit Zend Expressive zu implementieren. In nicht mehr als einer Handvoll Dateien und 10 Minuten Arbeit konnte die Listenseite unsere Beiträge aus der Datenbank anzeigen und war bereit für zusätzliche Routen, wie / edit und / delete .

Benutzt du Zend Semalt in deinen Projekten? Was magst du daran? Lass uns wissen, wie es dir geht!

March 1, 2018