Om du frågar, "Vad är Yii?" kolla in min tidigare handledning: Introduktion till Yii Framework, som granskar fördelarna med Yii och innehåller en översikt över vad som är nytt i Yii 2.0, släppt 12 oktober 2014.
I programmering med Yii2: Komma igång startade vi Yii2 lokalt, byggde ett Hello World-program, satte upp en fjärrserver och använde GitHub för att distribuera vår kod. I del två lärde vi oss om Yii: s genomförande av sin Model View Controller-arkitektur och hur man bygger webbsidor och formulär som samlar in och validerar data. I den här handledningen använder vi YiS databas och aktiva rekordfunktioner för att automatisera kodgenerering för en grundläggande webbapplikation.
För dessa exempel fortsätter vi att föreställa oss att vi bygger ett ramverk för att skicka enkla statusuppdateringar, t.ex. vår egen mini-Twitter.
Först måste vi skapa en databas i vår utvecklingsmiljö. Jag gör det genom MAMPs PHPMyAdmin webbgränssnitt. Navigera till PHPMyAdmin, t.ex. http: // localhost: 8888 / MAMP / index.php? page = phpmyadmin, välj databaser fliken och skapa en databas som heter Hej
:
Du kan också använda MySQL-kommandoradsgränssnittet.
Nu ska vi ge databasuppgifter till Yii databaskonfigurationsfil. Öppna /hello/config/db.php
och ge din MySQL-databasuppgifter. Mine ser så här ut:
'yii \ db \ Connection', 'dsn' => 'mysql: värd = localhost; dbname = hej', 'användarnamn' => 'root', 'lösenord' => 'lösenord', 'charset' => 'utf8 ',];
Nu skapar vi vår första databasmigrering. En migrering ger ett programmatiskt sätt att skapa och uppdatera databasscheman. Det är särskilt användbart om du kör på flera servrar eller i olika miljöer. Det eliminerar svårigheten att importera SQL-skript.
För våra kodningsexempel kan du använda Git-förvaret från den sista handledningen för att följa med, eller du kan ladda ner det färdiga arkivet här.
Vår första migrering skapar statustabellen. Öppna Terminal och ange följande:
cd ~ / Sites / hej ./yii migrera / skapa create_status_table
Det ska se ut så här när du är klar:
När du öppnar \ hello \ migreringar
, Du kommer att se en fil som heter m141201_013120_create_status_table.php
. Det ska se ut så här när det öppnas:
Det här är den standardmigrationskod som Yii tillhandahåller. Därefter uppdaterar vi den för att ge de fält vi behöver.
Bygga status tabellen
Vårt Status-tabell lagrar meddelandetext och anger om ett inlägg är privat eller offentligt. Varje rad har också ett id, skapar och uppdaterar tidsfält.
Uppdatera din migreringskod till vår:
allmän funktion upp () $ tableOptions = null; om ($ this-> db-> driverName === 'mysql') $ tableOptions = 'CHARACTER SET utf8 COLLATE utf8_unicode_ci ENGINE = InnoDB'; $ this-> createTable ('% status', ['id' => Schema :: TYPE_PK, 'message' => Schema :: TYPE_TEXT. 'INTE NULLSTÄLLIGT ""', 'behörigheter' => Schema :: TYPE_SMALLINT. 'INTE NULLSTÄLLD 0', 'created_at' => Schema :: TYPE_INTEGER. 'NOT NULL', 'updated_at' => Schema :: TYPE_INTEGER. 'NOT NULL',], $ tableOptions); Offentlig funktion ner () $ this-> dropTable ('% status');Lägg märke till hur vi har lagt till definitioner för de fält vi behöver, till exempel
meddelande
,behörigheter
,skapad vid
, ochupdated_at
.Kör migreringen
För att berätta för Yii att skapa bordet måste vi köra migreringen. Det är lätt. Från Terminal igen kör vi
./ yii migrera / uppåt
:$ ./yii migrera / uppåt Yii Migrationsverktyg (baserat på Yii v2.0.0) Totalt 1 ny migration som ska tillämpas: m141201_013120_create_status_table Använd ovanstående migrering? (ja | nej) nej: ja *** tillämpning m141201_013120_create_status_table> skapa tabell % status ... klar (tid: 0.032s) *** tillämpas m141201_013120_create_status_table (tid: 0.038s) Migrerad framgångsrikt.Om du bläddrar i tabellen med PHPMyAdmin borde du se något så här:
Nu när vi har skapat databastabellen kan vi börja använda Gii, Yii kraftfulla ställningsgenerator, för att automatisera hela modellvisningskontrollkoden.
2. Använda Gii: Yii kodgenerator
Gii är Yii stavningskodgenerator. Den använder sin kunskap om ditt databasschema för att skapa välskriven, standardmodellvisningskontrollkod för din ansökan. Gii kan konvertera ett databasschema till en grundläggande webbapplikation på några minuter. Det är oerhört kraftfullt. Låt mig visa dig hur det fungerar.
Bygga modellen
Med Gii börjar vi genom att bygga en modell baserad på varje databasstabell som vi har skapat. För vårt exempel använder vi statustabellen.
För att börja använda Gii, navigera till din webbapplikation och lägg till
/ gii
, t.ex. http: // localhost: 8888 / hello / web / GII. Du ser något så här:Klicka på Modellgenerator, och skriv in
status
i Tabellnamn fält:När du klickar Förhandsvisning, Det kommer visa dig vilka filer det kommer att bygga. Eftersom vi redan har en Status.php-modellfil från den sista handledningen klickar du på Skriva över. Klicka sedan Generera.
Resultaten kommer att se ut så här:
Öppna
/hello/models/Status.php
fil och du får se de grundläggande valideringsreglerna och formuläregenskaper som Yii har byggt för oss:'ID', 'message' => 'Meddelande', 'behörigheter' => 'Tillstånd', 'created_at' => 'Skapad till', 'updated_at' => 'Uppdaterad till',];Bygga webgränssnittet
Nu är det dags att använda Gii för att bygga kontrollenheten och vyerna för Status-tabellen. Gå tillbaka till Gii hemsida och klicka CRUD Generator, t.ex. http: // localhost: 8888 / hello / webb / gii / crud:
För Modellklass, stiga på
app \ modeller \ Status
(dessa poster är skiftlägeskänsliga). För Sök modellklass, stiga påApp \ modeller \ StatusSearch
. För Controller Class, stiga påapp \ styrenheter \ StatusController
. Det ska se ut så här:Klick Förhandsvisning. Du ser följande: var noga med att klicka på Skriva över igen eftersom vi har äldre filer från den sista handledningen som behöver uppdateras:
När du klickar Generera, Du kommer att se hela kontrollen och visa filer som genereras:
Standard CRUD Pages
Navigera din webbläsare till http: // localhost: 8888 / hej / web / status, och du får se den genererade CRUD index sidan. Eftersom det inte finns några rader i databasen ändå visas det tomt.
Klicka nu på Skapa status och du får se standard Skapa statusformulär som Gii skapade:
Det är ganska fantastiskt hur snabbt Gii skapar arbetskod för oss. Därefter anpassar vi stillbildskoden för att göra det här arbetet för oss.
3. Anpassa vår kod
Anpassa formulärvyn
Låt oss städa upp formuläret. I
/hello/views/Status/_form.php
, ta bort de skapade och uppdaterade fälten:= $form->fält ($ model, 'created_at') -> textInput ()?> = $form->fält ($ model, 'updated_at') -> textInput ()?>Byt behörighetsfältet med listrutan som vi skapade i del två i serien:
= $form->fält ($ modell, behörigheter) -> dropDownList ($ model-> getPermissions (), ['prompt' => '- Välj dina behörigheter -'])>>Vi måste sätta
getPermissions
funktionen tillbaka i modellen också. Redigera/hello/models/Status.php
. Sätta tillbaka de konstanta definitionerna och behörighetsfunktionerna:const PERMISSIONS_PRIVATE = 10; const PERMISSIONS_PUBLIC = 20; ... offentliga funktion getPermissions () return array (själv :: PERMISSIONS_PRIVATE => 'Privat', själv :: PERMISSIONS_PUBLIC => 'Public'); public function getPermissionsLabel ($ behörigheter) if ($ permissions == self :: PERMISSIONS_PUBLIC) returnera "Public"; annat returnera "Privat";Din nya statusformulär ska se ut så här:
Vi behöver justera regulatorn lite för att få formuläret att spara rätt.
Anpassa kontrollenheten
I
/hello/controllers/StatusController.php
, ErsättactionCreate
metod med denna kod:public function actionCreate () $ model = ny status (); om ($ modell-> ladda (Yii :: $ app-> request-> post ())) $ model-> created_at = time (); $ model-> updated_at = time (); om ($ model-> save ()) return $ this-> omdirigera (['view', 'id' => $ model-> id]); returnera $ this-> render ('create', ['model' => $ modell,]);När formuläret är upplagt ställer vi in manuellt
skapad vid
ochupdated_at
fält, då lagrar vi data i databasen.När du sparar din första statusuppdatering ser du följande vy sida:
Justera layouten
Låt oss justera navbaren så att den inte faller ned för Status men hoppar direkt till Statusindex-sidan. Redigera
/hello/views/layouts/main.php
och ersättNav :: widget
kod med detta:echo Nav :: widget (['options' => ['class' => 'navbar-nav navbar-right'], 'items' => [['label' => 'Hem', 'url' => '/ site / index']], ['label' => 'Status', 'url' => ['/ status / index']], ['label' => 'Om', 'url' => '/ site / about']], ['label' => 'Kontakt', 'url' => ['/ webbplats / kontakt']], Yii :: $ app-> user-> isGuest? => 'Logga in', 'url' => ['/ site / login']]: ['label' => 'Logga ut (' .Yii :: $ app-> user-> identity-> användarnamn. ') , 'url' => ['/ site / logout'], 'linkOptions' => ['data-method' => 'inlägg']],],]);Grid View
När du återgår till Statusindex-vyn kan du se Yii2-nätet fyllt med data:
Koden som genererar denna sida finns i
/hello/views/status/index.php
:title = 'Statuses'; $ this-> params ['breadcrumbs'] [] = $ this-> title; ?>= Html::encode($this->titel)?>
render ('_ search', ['model' => $ searchModel]); ?>= Html::a('Create Status', ['create'], ['class' => 'btn btn-success'])?>
= GridView::widget([ 'dataProvider' => $ dataProvider, 'filterModel' => $ searchModel, 'kolumner' => [['class' => 'yii \ grid \ SerialColumn'], 'id', 'meddelande: ntext', 'behörigheter', 'created_at' 'updated_at', ['class' => 'yii \ grid \ ActionColumn'],],]); ?>Om du försöker kolla sorteringen och visa, uppdatera och ta bort ikoner ser du att Gii har byggt ut alla funktioner för dessa funktioner också.
Så om några minuter skapade vi ett schema för vår databas, och genererade en modell och all den webbapplikationskod som behövs för en grundläggande applikation. Jag hoppas att du har hittat YiS kodgenereringskapacitet så imponerande som jag har.
Vad kommer härnäst?
Därefter visar jag dig hur du integrerar användarregistrering och inloggningsmöjligheter i vår applikation så att vi kan konfigurera anslutning mellan statusposter och specifika användare.
Om du vill veta när nästa Yii2 handledning kommer, följ mig @ reifman på Twitter eller kolla min Tuts + instruktörssida. Min instruktörssida kommer att innehålla alla artiklar från denna serie så snart de publiceras.
relaterade länkar