Hvis du spør, "Hva er Yii?" sjekk ut min tidligere opplæring: Introduksjon til Yii Framework, som vurderer fordelene med Yii og inneholder en oversikt over hva som er nytt i Yii 2.0, utgitt 12. oktober 2014.
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. I del to lærte vi om Yiis implementering av sin Model View Controller-arkitektur og hvordan man bygger nettsider og skjemaer som samler og validerer data. I denne opplæringen bruker vi Yiis database og aktive rekordfunksjoner for å automatisere kodegenerering for et grunnleggende webprogram.
For disse eksemplene fortsetter vi å forestille oss at vi bygger et rammeverk for å legge ut enkle statusoppdateringer, f.eks. vår egen mini-Twitter.
Først må vi opprette en database i vårt utviklingsmiljø. Jeg gjør dette gjennom MAMPs PHPMyAdmin webgrensesnitt. Naviger til PHPMyAdmin, f.eks. http: // localhost: 8888 / MAMP / index.php? page = phpmyadmin, velg databaser kategorien og opprett en database som heter Hallo
:
Du kan også bruke MySQL kommandolinjegrensesnittet.
Nå skal vi gi database legitimasjon til Yii database konfigurasjonsfil. Åpen /hello/config/db.php
og gi din MySQL-database legitimasjon. Mine ser slik ut:
'yii \ db \ Tilkobling', 'dsn' => 'mysql: vert = localhost; dbname = hello', 'brukernavn' => 'root', 'passord' => 'passord', 'charset' => 'utf8 ',];
Nå lager vi vår første databaseoverføring. En migrering gir en programmatisk måte å opprette og oppdatere databaseskjemaer på. Det er spesielt nyttig hvis du kjører på flere servere eller i ulike miljøer. Det eliminerer vanskeligheten ved å importere SQL-skript.
For våre kodende eksempler kan du bruke Git-depotet fra den siste opplæringen til å følge med, eller du kan laste ned det ferdige lageret her.
Vår første migrering vil opprette statustabellen. Åpne Terminal og skriv inn følgende:
cd ~ / Nettsteder / hei ./yii migrere / opprett create_status_table
Det skal se slik ut, når du er ferdig:
Når du åpner \ hallo \ vandringer
, Du får se en fil som heter ligner på m141201_013120_create_status_table.php
. Det skal se slik ut når åpnet:
Dette er standard migrasjonskoden som Yii gir. Deretter oppdaterer vi den for å gi de feltene vi trenger.
Bygg statustabellen
Status tabellen lagrer meldingstekst og angir om et innlegg er privat eller offentlig. Hver rad vil også ha et id, opprette og oppdatere tidsfelter.
Oppdater migrasjonskoden til vår:
offentlig funksjon opp () $ tableOptions = null; hvis ($ this-> db-> drivernavn === 'mysql') $ tableOptions = 'CHARACTER SET utf8 COLLATE utf8_unicode_ci ENGINE = InnoDB'; $ this-> createTable ('% status', ['id' => Skjema :: TYPE_PK, 'message' => Skjema :: TYPE_TEXT. 'IKKE NULL DEFAULT ""', 'permissions' => Skjema :: TYPE_SMALLINT. 'IKKE NULLVALT 0', 'created_at' => Skjema :: TYPE_INTEGER. 'NOT NULL', 'updated_at' => Skjema :: TYPE_INTEGER. 'NOT NULL',], $ tableOptions); offentlig funksjon ned () $ this-> dropTable ('% status');Legg merke til hvordan vi har lagt til definisjoner for feltene vi trenger, for eksempel
budskap
,tillatelser
,created_at
, ogupdated_at
.Kjør overføringen
For å fortelle Yii å lage bordet, må vi kjøre overføringen. Det er lett. Fra Terminal igjen løper vi
./ yii migrere / opp
:$ ./yii migrere / opp Yii Migreringsverktøy (basert på Yii v2.0.0) Totalt 1 ny migrasjon som skal brukes: m141201_013120_create_status_table Bruk overføringen ovenfor? (ja | nei) nei: ja *** bruk m141201_013120_create_status_table> opprett tabell % status ... ferdig (tid: 0.032s) *** brukt m141201_013120_create_status_table (tid: 0.038s) Migrert opp.Hvis du surfer på tabellen ved hjelp av PHPMyAdmin, bør du se noe slikt:
Nå som vi har opprettet databasetabellen, kan vi begynne å bruke Gii, Yiis kraftige stillasgenerator, for å automatisere alle modellvisningskontrollkodene.
2. Bruke Gii: The Yii Code Generator
Gii er YiS stillasekodegenerator. Den bruker sin kunnskap om databaseskjemaet ditt for å generere velskrevet, standard modellvisningskontrollkoden for din søknad. Gii kan konvertere et databaseskjema til et grunnleggende fungerende webprogram på få minutter. Det er utrolig kraftig. La meg vise deg hvordan det fungerer.
Bygg modellen
Med Gii begynner vi ved å bygge en modell basert på hver databasetabell vi har opprettet. For vårt eksempel bruker vi Status-tabellen.
For å begynne å bruke Gii, naviger til webapplikasjonen din og legg til
/ Gii
, f.eks http: // localhost: 8888 / hei / web / gii. Du ser noe slikt:Klikk på Modell Generator, og skriv inn
status
i Tabellnavn felt:Når du klikker Forhåndsvisning, det vil vise deg hvilke filer den vil bygge. Siden vi allerede har en Status.php-modellfil fra den siste opplæringen, klikker du skrive. Deretter klikker du generere.
Resultatene ser slik ut:
Åpne
/hello/models/Status.php
fil, og du vil se de grunnleggende valideringsreglene og skjemaattributtene som Yii har bygget for oss:'ID', 'message' => 'Melding', 'tillatelser' => 'Tillatelser', 'created_at' => 'Skapt på', 'updated_at' => 'Oppdatert på',];Bygg webgrensesnittet
Nå er det på tide å bruke Gii til å bygge kontrolleren og visningene for Status-tabellen. Gå tilbake til Gii-hjemmesiden og klikk CRUD Generator, f.eks http: // localhost: 8888 / hei / web / gii / crud:
Til Modellklasse, Tast inn
app \ modeller \ Status
(disse oppføringene er saksfølsomme). Til Søk Modellklasse, Tast innapp \ modeller \ StatusSearch
. Til Controller Class, Tast innapp \ kontrollere \ StatusController
. Det skal se slik ut:Klikk Forhåndsvisning. Du ser følgende: vær sikker på å klikke skrive igjen siden vi har eldre filer fra den siste opplæringen som må oppdateres:
Når du klikker generere, Du vil se hele kontrolleren og vise filer som er generert:
Standard CRUD Pages
Naviger nettleseren din til http: // localhost: 8888 / hei / web / status, og du vil se den genererte CRUD indekssiden. Siden det ikke er noen rader i databasen, vises det tomt.
Nå klikker du på Opprett status og du vil se standard Create Status Form som Gii opprettet:
Det er ganske utrolig hvor raskt Gii skaper arbeidskode for oss. Deretter tilpasser vi stillasekoden for å gjøre dette arbeidet for oss.
3. Tilpasse vår kode
Tilpasse skjemavisningen
La oss rydde opp skjemaet. I
/hello/views/Status/_form.php
, fjern de opprettede og oppdaterte feltene:= $form->felt ($ modell, 'created_at') -> textInput ()?> = $form->feltet ($ model, 'updated_at') -> textInput ()?>Erstatt tillatelsesfeltet med rullegardinskoden vi opprettet i del to av denne serien:
= $form->feltet ($ modell, 'tillatelser') -> dropDownList ($ model-> getPermissions (), ['prompt' => '- velg dine tillatelser -'])?>Vi må sette
getPermissions
Fungerer også tilbake i modellen. Redigere/hello/models/Status.php
. Sett tilbake de konstante definisjonene og tillatelsesfunksjonene:const PERMISSIONS_PRIVATE = 10; const PERMISSIONS_PUBLIC = 20; ... offentlig funksjon getPermissions () return array (selv :: PERMISSIONS_PRIVATE => 'Privat', selv :: PERMISSIONS_PUBLIC => 'Public'); offentlig funksjon getPermissionsLabel ($ permissions) if ($ permissions == selv: PERMISSIONS_PUBLIC) return 'Public'; annet return 'Private';Din nye status skjema bør se slik ut:
Vi må justere kontrolleren litt for å få skjemaet til å lagre riktig.
Tilpasse kontrolleren
I
/hello/controllers/StatusController.php
, erstatteactionCreate
metode med denne koden:offentlig funksjon actionCreate () $ model = new Status (); hvis ($ model-> last (Yii :: $ app-> request-> post ())) $ model-> created_at = time (); $ model-> updated_at = time (); hvis ($ model-> save ()) return $ this-> omdirigere (['view', 'id' => $ model-> id]); returnere $ this-> render ('create', ['model' => $ modell,]);Når skjemaet er lagt opp, setter vi manuelt
created_at
ogupdated_at
felt, da lagrer vi dataene i databasen.Når du lagrer din første statusoppdatering, ser du følgende visningsside:
Justere oppsettet
La oss justere navbar slik at den ikke faller ned for Status, men hopper direkte til Statusindeks-siden. Redigere
/hello/views/layouts/main.php
og erstattNav :: widget
kode med dette:echo Nav :: widget (['options' => ['class' => 'navbar nav navbar-right'], 'items' => [['label' => 'Hjem', 'url' => '/ site / index']], ['label' => 'Status', 'url' => ['/ status / indeks']], ['label' => 'Om', 'url' => '/ site / about']], ['label' => 'Kontakt', 'url' => ['/ nettsted / kontakt']], Yii :: $ app-> user-> isGuest? => 'Logg inn', 'url' => ['/ side / innlogging']]: ['label' => 'Logout (' .Yii :: $ app-> bruker-> identitet-> brukernavn. ') , 'url' => ['/ site / logout'], 'linkOptions' => ['data-metode' => 'innlegg']],],]);Rutenettet
Når du går tilbake til Statusindeksvisningen, kan du se Yii2-rutenettet fylt med data:
Koden som genererer denne siden er i
/hello/views/status/index.php
:title = 'Statuses'; $ this-> params ['breadcrumbs'] [] = $ this-> tittelen; ?>= Html::encode($this->tittel)?>
gjengivelse ('_ søk', ['modell' => $ søkemodell]); ?>= Html::a('Create Status', ['create'], ['class' => 'btn btn-suksess'])?>
= GridView::widget([ 'dataProvider' => $ dataProvider, 'filterModel' => $ searchModel, 'columns' => [['class' => 'yii \ grid \ SerialColumn'], 'id', 'melding: ntext', 'tillatelser', 'created_at' 'updated_at', ['class' => 'yii \ grid \ ActionColumn'],],]); ?>Hvis du prøver kolonnesorteringen og ser, oppdaterer og sletter ikoner, ser du at Gii har bygget ut all funksjonalitet for disse funksjonene også.
Så på bare noen få minutter opprettet vi et skjema for databasen vår, og genererte en modell og all webapplikasjonskoden som trengs for en grunnleggende applikasjon. Jeg håper du har funnet Yii kodegenereringskapasiteter så imponerende som jeg har.
Hva blir det neste?
Neste opp, vil jeg vise deg hvordan du integrerer brukerregistrering og innloggingsfunksjoner i vår søknad, slik at vi kan konfigurere forbindelsesrelasjoner mellom statusposter og bestemte brukere.
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