Slik programmerer du med Yii2 Utforsker MVC, skjemaer og layouter

Hva du skal skape

I programmering med Yii2: Komme i gang opprettet vi Yii2 lokalt, bygget et Hello World-program, opprettet en ekstern server og brukte Github til å distribuere koden vår. Denne opplæringen vil dekke noen av Yiis mer grunnleggende begreper knyttet til implementeringen av MVC-rammen: Modeller, Visninger og Controllers. Vi vil også utforske oppsett og tilpasning av navigasjonsmenyer og Bootstrap-elementer.

For disse eksemplene kan vi forestille oss at vi bygger et rammeverk for å legge ut enkle statusoppdateringer, f.eks. vår egen mini-Twitter. Vi vil imidlertid ikke gå så langt som å lagre dataene i en database. Jeg lagrer det for neste opplæring, som vil utforske YiS stillasevner, kalt Gii.

Gii automatiserer og forenkler alt vi skal gjøre i denne opplæringen, men det er viktig å gå gjennom de grunnleggende konseptene og utføre disse oppgaver manuelt minst en gang.

modeller

Hva er en modell? Wikipedia sier, "A modell melder sine tilknyttede visninger og kontroller når det har vært en endring i sin tilstand. Dette varslet gjør det mulig for visningene å produsere oppdatert utgang, og kontrollerne for å endre det tilgjengelige settet med kommandoer. "

For meg representerer modeller ofte konseptene av hva jeg bygger i den "eksterne" verden. Så, hvis vi tenker på statusoppdateringer, vil Statusmodellen inneholde alle egenskapene til en statusoppdatering og alle funksjonene eller metodene knyttet til spørring eller endring av status eller statuser. 

Best praksis er å bygge så mye funksjonalitet og intelligens inn i modellene som mulig. I MVC praksis bygger du modeller "tung" og kontroller og visningslys. Yii gir noen gode funksjoner som er spesifikke for hva slags ting du gjør i web- og applikasjonsutvikling som forenkler modellbygging - spesielt når det gjelder skjemaer og databaser; mesteparten av dette vil vi utforske i senere opplæringsprogrammer.

La oss lage vår Status-modell. For våre kodende eksempler kan du bruke Git-depotet. Jeg bygger på det vi opprettet i Komme i gang-veiledningen - jeg har merket det her som referanse. Github-depotet for den ferdige opplæringen er her.

Vi oppretter Status.php i /hello/models/Status.php. For å legge inn en statusmelding må vi samle teksten til meldingen fra brukeren. Vi lager også et tillatelsesfelt for publisering offentlig eller privat.

'Private', selv :: PERMISSIONS_PUBLIC => 'Offentlig');  offentlig funksjon getPermissionsLabel ($ permissions) if ($ permissions == selv: PERMISSIONS_PUBLIC) return 'Public';  annet return 'Private'; ?>

Legg merke til at reglene fungerer - det brukes av Yii form validering for å sikre at brukerne oppgir riktig informasjon i hvert felt. Yii bruker JavaScript til å validere skjemaer som brukeren skriver.

De getPermissions () funksjonen jeg opprettet vil bli brukt til formularens nedtrekkslisteelementer.

Nå, la oss gå videre for å opprette en kontroller for å la brukeren opprette og se tekstoppdateringene.

Controllers

Hva er en kontroller? Wikipedia sier, "A kontrolleren kan sende kommandoer til modellen for å oppdatere modellens tilstand (for eksempel redigere et dokument). Det kan også sende kommandoer til tilhørende visning for å endre visningens presentasjon av modellen. "I en typisk Yii webapplikasjon påkaller en URL-bane til en side en kontroller for å laste dataene til siden ved hjelp av modellen og gjøre siden ved hjelp av utsikten. 

Det er best å logisk gruppere relaterte funksjoner innenfor en enkelt kontroller. Forskjellige metoder for kontrolleren, kalt handlinger, implementerer hver funksjon. Disse korresponderer ofte med bestemte sider. For eksempel, http: // localhost: 8888 / hei / web / status / create vil påkalle StatusControllers opprettingshandling som vi skal bygge.

Når du utvikler statusrelaterte funksjoner, vil du gruppere disse funksjonene i en enkelt StatusController.php. For nå skal vi bare bygge en skape-funksjon.

I / Hei / kontrollere /, opprett StatusController.php:

last (Yii :: $ app-> request-> post ()) && $ $-> validere ()) // gyldige data mottatt i $ modell returnere $ this-> render ('view', ['model' = > $ modell]);  ellers // enten siden er opprinnelig vist eller det er noen valideringsfeil returnere $ this-> render ('create', ['model' => $ modell]); ?>

Skjemaopprettingshandlinger krever vanligvis modelldata og deretter gaffelavhengig avhengig av om de er en del av en POST-operasjon eller ikke. Hvis ikke, vises den tomme skjemaet. Hvis de mottar oppdaterte data, blir de validert og behandlet. I vårt tilfelle betyr dette at du fortsetter å gjengi visningsfilen.

Visninger

Hva er en visning? Wikipedia sier, "A utsikt ber om informasjon fra modellen som den bruker til å generere en utdatarepresentasjon til brukeren. "I Yii bruker visningen et PHP-lignende malespråk for å gjøre sidenesultatet til HTML, utnytte data lastet av modellen og levert fra kontrolleren.

Visninger er vanligvis plassert i en enkelt mappe som er relatert til den tilknyttede kontrolleren, f.eks. StatusController-visningene er plassert i visninger / status mappe.

I Yii er skjemakode vanligvis inkludert i det som kalles en delvis visning. Disse filene heter ofte med et understrekingsprefix. De er ment å være inkludert av andre synspunkter. Dette gjør det mulig å gjenbruke den faktiske skjema koden ved å opprette og oppdatere sider.

Først skal vi lage Opprett visning som gjør skjemaet. Deretter vil vi også opprette en visningsvisning for å vise oss statusoppdateringen som vi legger inn. I kommende opplæringsprogrammer, når vi jobber med en faktisk database, lagrer og henter dataene, vil dette fungere litt annerledes.

Her er et enkelt eksempel på vår /hello/views/status.view.php se fil for å gjengi opplastede data:

 

Statusoppdateringen din

:

tekst)?>

:

getPermissionsLabel ($ modell> tillatelser); ?>

Legg merke til hvordan en visningsfil er en blanding av HTML og PHP. Når kontrolleren mottar oppdaterte data, viser den ovenfor visningen, og viser hvilke data brukeren sendte inn.

Men, la oss nå snakke om skjemaer og bygge skjemaet for skjemaformat.

skjemaer

Skjemaer er det vi bruker hver dag i webutvikling for å samle inn data fra brukeren, ofte for å sende brukerinngang til en database. Yii gir en hel del hjelpekode for å forenkle prosessen med å bygge, validere, sikre og legge ut data fra skjemaer. I Yii er skjemaer en type visning.

Her er et eksempel på skjema for å opprette en statusoppdatering:

  felt ($ modell, 'tekst') -> textArea (['rows' => '4']) -> label ('Status Update'); ?> feltet ($ modell, 'tillatelser') -> dropDownList ($ model-> getPermissions (), ['prompt' => '- velg dine tillatelser -'])?> 
'btn btn-primary'])?>

Yii2 ActiveForm-widgeten brukes til å generere HTML for våre felt. Legg merke til hvordan rullegardinlisten påberoper statusmodellen getPermissions metode.

Når du klikker på Send-knappen, går du tilbake til StatusControllers opprettingshandling. Når de oppførte dataene er mottatt, gjør den deretter view.php-filen i stedet for create.php-formfilen.

Slik viser visningsfilen når den gjengis med view.php:

Deretter la vi oppdatere den globale navigasjonslinjen for å inkludere koblinger til skjemaet for statusopprettelse.

oppsett

Layout er malene for de fleste av de ytre, gjentatte elementene på et nettsted, for eksempel HTML-dokumentomslaget, topptekst, navigeringslinje og bunntekst. Siden disse er felles for de fleste sider på et nettsted, er de bygget en gang i oppsettet og ikke gjentatt overalt i koden.

Hvis du ser på \ Hallo \ utsikt \ oppsett \ main.php, du kan se strukturen til ytre layout:

 startside ()?>       <?= Html::encode($this->tittel)?> hode ()?>   startBody ()?> 
'My Company', 'brandUrl' => Yii :: $ app-> homeUrl, 'options' => ['class' => 'navbar-inverse navbar-fixed-top',],]); echo Nav :: widget (['options' => ['class' => 'navbar nav navbar-right'], 'items' => [['label' => 'Hjem', 'url' => '/ site / index']], ['label' => 'Om', 'url' => ['/ side / om']], ['label' => 'Kontakt', 'url' => '/ site / contact']], Yii :: $ app-> user-> isGuest? ['label' => 'Logg inn', 'url' => ['/ nettsted / login']]: ['label' => 'Logg ut ('. Yii :: $ app-> bruker-> identitet-> brukernavn. ')', 'Url' => ['/ nettsted / logg ut'], 'linkOptions' => ['data-metode '=>' innlegg ']],],]); NavBar :: ende (); ?>
isset ($ this-> params ['breadcrumbs'])? $ this-> params ['breadcrumbs']: [],])?>

© Firmaet mitt

endBody ()?> endPage ()?>

Visninger representerer hovedsakelig de indre sidekroppene til et nettsted - hva er mellom topptekst og navigeringslinje og begynnelsen på bunnteksten. De blir gjengitt når layoutet echo $ innhold:

 
isset ($ this-> params ['breadcrumbs'])? $ this-> params ['breadcrumbs']: [],])?>

Yii lar deg bygge flere oppsett per applikasjon, selv om dette ikke alltid er nødvendig. Det avhenger av søknaden din. Controllers tilbyr et standardoppsett, og du kan overstyre dette for en gitt handling. Hvis dine kontrollører logisk grupperer relaterte aktiviteter, er det sannsynlig at brukergrensesnittet vil bruke samme layout for alle handlinger innenfor en kontroller.

La oss nå oppdatere navigeringslinjen for å inkludere en Status-meny med en "opprett" -handling. Siden Yii2 bruker Bootstrap for sine layouter og stiler, trenger vi bare å fortelle det om å lage en Bootstrap dropdown.

Oppdater Nav :: widget å ha en nestet array:

 echo Nav :: widget (['options' => ['class' => 'navbar nav navbar-right'], 'items' => [['label' => 'Hjem', 'url' => '/ site / index']], ['label' => 'Status', 'items' => [['label' => 'Lag', 'url' => ['/ status / opprett']] ], ['label' => 'Om', 'url' => ['/ side / om']], ['label' => 'Kontakt', 'url' => ['/ nettsted / kontakt '], Yii :: $ app-> user-> isGuest? [' Label '=>' Logg inn ',' url '=> [' / nettsted / login ']]: [' label '=>' Logout '. Yii :: $ app-> bruker-> identitet-> brukernavn.') ',' Url '=> [' / site / logout '],' linkOptions '=> [' data-method '=>' innlegg ']],],]); 

Her er hva du bør se:

Hva blir det neste?

Nå som du vet litt om hvordan YiS MVC-arkitektur fungerer i praksis, inkludert modeller, visninger, kontrollører, skjemaer og layouter, oppretter vi et databaseskjema for statuser og bruker YiS stillasgenerator Gii til å bygge alt dette automatisk for oss. Ting vil begynne å bevege seg litt raskere.

Hvis du vil vite når neste Yii2 opplæring kommer, følg meg @ reifman på Twitter eller sjekk min Tuts + instruktørside. Min instruktørside vil inkludere alle artiklene fra denne serien så snart de er publisert.

Relaterte linker

  • Yii Framework Website
  • Introduksjon til Yii Framework (Tuts +) 
  • Programmering med Yii2: Komme i gang (Tuts +)
  • Andre gratis og åpen kildekode-utviklereksempler av forfatteren