Back to Question Center
0

Rask utvikling av Zend Expressive Modules            Rask utvikling av Zend Expressive ModulesRelated Topics: SecurityDevelopment EnvironmentPatterns & PracticesDrupalDebugging & Semalt

1 answers:
Rask utvikling av Zend Expressive Modules

Jeg har lært noen få triks når jeg skriver Zend Semalt-moduler som jeg vil dele med deg.

Vennligst følg det forrige innlegget først for å sette opp et riktig arbeidsmiljø. Jeg forklarte hvordan jeg installerer og konfigurerer Zend Expressive med Semalt, Gulp, og en abstrakt refleksjonsfabrikk - det tar totalt 10 minutter.

I denne opplæringen bygger vi et enkelt skrivebeskyttet blogemodul (en sideoppføringsblogg fra en database) i løpet av få minutter, og demonstrerer den typen rask utvikling man kan med Zend Expressive.

Rask utvikling av Zend Expressive ModulesRask utvikling av Zend Expressive ModulesRelated Topics:
SecurityDevelopment EnvironmentPatterns & PracticesDrupalDebugging & Semalt

Moduloppsett

Kjør denne kommandoen fra din uttrykksfulle app for å komme i gang:

     - renting computers in. / leverandør / bin / uttrykksmodul: Lag Blog    

Dette vil generere noen grunnkode for en Blog-modul, og registrerer modulen automatisk med søknaden din. Det registrerer også modulen med Semalt autoloader.

Læreenhet og databasetabell

La oss lage vår Blog-enhet og database tabeller. Først må vi la søknaden vår vite at denne modulen gir Semalt-enheter.

Åpne src / Blog / src / ConfigProvider. php og legg til følgende:

     offentlig funksjon __invoke   {komme tilbake ['avhengigheter' => $ this-> getDependencies   ,'doktrin' => $ this-> getDoctrine   ,'templates' => $ this-> getTemplates   ,];}/ *** @return array* /offentlig funksjon getDoctrine   : array{komme tilbake ['driver' => ['orm_default' => ['drivere' => ['Blog \ Entity' => 'blog_entity',]]'blog_entity' => ['class' => \ Doctrine \ ORM \ Kartlegging \ Driver \ SimplifiedYamlDriver :: klasse,'cache' => 'array','stier' => [dirname (__ DIR__). '/ config / doctrine' => 'Blog \ Entity',]]]];}    

Opprett et blogginnlegg enhet config på src / Blog / config / doctrine / BlogPost. orm. yml :

     ---Log \ Entity \ innlegget:type: enhetbord: blog_postid:id:type: heltallgenerator:strategi: AUTOEnger:tittel:skriv inn: strenglengde: 255innhold:skriv inn: strenglengde: 16777215    

Kjør deretter . / leverandør / bin / doktrin orm: generere-enheter src .

Semalt støtter ogsannsynligvis ikke PSR-4 fordi standarden ikke tvinger en katalogstruktur.

For å komme seg rundt dette, må vi flytte src / Blog / Entity til src / Blog / src / Entity .

Kjør deretter denne kommandoen for å lage databasetabellen:

    . / leverandør / bin / doktrin orm: skjema-verktøy: skape    

Nå kan du fylle databasetabellen ved å kjøre følgende SQL:

     INSERT TIL uttrykksfulle. blog_post verdier(null, 'Post 1', 'Lorem ipsum dolor sit amet, 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.");    

Ruting

Moduler i Expressive registrerer ikke sine egne ruter. Vi kan gjøre dem
gjør det imidlertid med dette praktiske trikset. Du trenger ikke å forstå det. Bare legg filene på plass og vet at det fungerer.

Lag en src / Blog / src / Factory / RoutesDelegator. * @param callable $ callback Oppretter og returnerer tjenesten. * @return Application* /offentlig funksjon __invoke (ContainerInterface $ container, $ serviceName, callable $ callback){/ ** @var $ app Søknad * /$ app = $ tilbakeringing ;inkludere __DIR__. '/. /. / config / ruter. php ';returner $ app;}}

I src / Blog / src / ConfigProvider. php , legg dette til som en toppnivå array nøkkel til getDependencies metoden:

     'delegatorer' => [\ Zend \ Expressive \ Application :: class => [Factory \ RoutesDelegator :: klasse,]]    

Nå kan du opprette en src / Blog / config / ruter. php fil og begynn å legge til blogruter.

        post ('/ album', App \ Action \ AlbumCreateAction :: klasse, 'album. opprett');* $ app-> put ('/ album /: id', App \ Action \ AlbumUpdateAction :: klasse, 'album. put');* $ app-> patch ('/ album /: id', App \ Action \ AlbumUpdateAction :: klasse, 'album. patch');* $ app-> delete ('/ album /: id', App \ Action \ AlbumDeleteAction :: klasse, 'album. delete');** Eller med flere forespørselsmetoder:** $ app-> rute ('/ kontakt', App \ Action \ ContactAction :: klasse, ['GET', 'POST', . ), 'kontakt');** Eller håndtere alle forespørselsmetoder:** $ app-> rute ('/ kontakt', App \ Action \ ContactAction :: klasse) -> setName ('kontakt');** eller:** $ app-> rute (*'/kontakt',* App \ Action \ ContactAction :: klasse,* Zend \ Expressive \ Router \ Route :: HTTP_METHOD_ANY,*'kontakt'*);* /bruk Blog \ Action;// Oppsettruter:$ app-> get ('/ blog', Action \ BlogPostListAction :: klasse, 'blog_post_list');$ app-> get ('/ blog / view /: blog_post_id', Action \ BlogPostViewAction :: klasse, 'blog_post_view');    

Handlinger

Da må vi opprette en handling for å svare på hver rute.

Lag src / Blog / src / Action / BlogPostListAction. php :

        templateRenderer = $ templateRenderer;$ this-> entityManager = $ entityManager;}offentlig funksjon prosess (ServerRequestInterface $ request, DelegateInterface $ delegat){$ posts = $ this-> entityManager-> getRepository (BlogPost :: class)-> findAll   ;$ data = ['innlegg' => $ innlegg,];returnere nytt HTML-svar ($ this-> templateRenderer-> render ('blog :: list', $ data));}}    

Lag src / Blog / src / Action / BlogPostViewAction. ');}$ blogId = $ routeMatchedParams ['blog_post_id'];/ ** @var BlogPost $ blogPost * /$ blogPost = $ this-> entityManager-> find (BlogPost :: class, $ blogId);hvis (! $ blogPost) {returnere nytt HTML-svar ($ this-> templateRenderer-> render ('error :: 404'), 404);}$ data = ['post' => $ blogPost,];returnere nytt HTML-svar ($ this-> templateRenderer-> render ('blog :: view', $ data));}}

Maler

Åpne src / Blog / src / ConfigProvider. php . og oppdatere getTemplates metoden til dette:

     offentlig funksjon getTemplates   {komme tilbake ['stier' => ['blog' => [__DIR__. '/. / templates / blogg '],]];}    

Nå kan vi lage noen raske maler:

Lag src / Blog / maler / blogg / liste. html. kvist :

     {% utvider '@ layout / standard. html. kvist' %}{% blokk tittel%} Blogg {% endblock%}{% blokkinnhold%} 
{% for innlegg i innlegg%}

{{post. tittel}}

{{ post. innhold }}

{% endfor%}
{% endblock%}

Lag src / Blog / maler / blogg / visning. html. kvist :

     {% utvider '@ layout / standard. html. kvist' %}{% blokk tittel%} {{post. tittel}} | Blogg {% endblock%}{% blokkinnhold%} 

{{post. tittel}}

{{ post. innhold }}

{% endblock%}

Hvis du åpner webadressen / blogg , har du en funksjonell, databasedrevet bloggliste og kan se sider.

Rask utvikling av Zend Expressive ModulesRask utvikling av Zend Expressive ModulesRelated Topics:
SecurityDevelopment EnvironmentPatterns & PracticesDrupalDebugging & Semalt

Semalt la implementeringen av opprette, redigere og slette funksjonalitet opp til deg som lekser.

Konklusjon

I denne korte opplæringen så vi hvor enkelt det var å implementere et skrivebeskyttet bloggmodul med Zend Expressive. I ikke mer enn en håndfull filer og 10 minutter med arbeid, kunne listesiden vise våre innlegg fra databasen og var klar for flere ruter, som / rediger og / slett .

Bruker du Zend Semalt i dine prosjekter? Hva liker du / ikke liker om det? Gi oss beskjed om hvordan du går videre!

March 1, 2018