För en inledande bekantskap med Yii beskrivs i detta avsnitt hur man kan skapa
en första Yii-applikation. Det kraftfulla verktyget yiic
kan användas till att
automatisera kodgenerering för vissa ändamål. Vi antar att YiiRoot
är
katalogen där Yii är installerat, samt att WebRoot
är webbserverns rotkatalog
för dokument.
Kör yiic
från en kommandorad enligt följande:
% YiiRoot/framework/yiic webapp WebRoot/testdrive
Märk: Om
yiic
körs under Mac OS, Linux eller Unix, kan rättigheterna för filenyiic
behöva kompletteras så att den blir körbar (executable). Alternativt kan verktyget köras på följande sätt,% cd WebRoot/testdrive % php YiiRoot/framework/yiic.php webapp WebRoot/testdrive
Detta kommer att skapa en mall till Yii-applikation under katalogen
WebRoot/testdrive
. Applikationen har en katalogstruktur som kommer till
användning i de flesta Yii-applikationer.
Utan att skriva en enda rad kod kan den första Yii-applikationen nu testköras genom att mata in följande URL i webbläsarens adressfält:
http://hostname/testdrive/index.php
Som nu framgår består applikationen av tre sidor: startsidan, kontaktsidan och inloggningssidan. Startsidan visar lite information om applikationen samt användarens inloggningsstatus, kontaktsidan presenterar ett kontaktformulär som användare kan fylla i för att skicka sina förfrågningar och inloggningssidan ger användare möjlighet att bli autentiserade för åtkomst till priviligierat innehåll. Se nedanstående skärmdumpar för närmare detaljer.
Starsida
Kontaktsida
Kontaktsida med inmatningsfel
Kontaktsida med korrekt inmatning
Inloggningssida
Följande diagram visar applikationens katalogstruktur. Se Konventioner för detaljerad förklaring till denna struktur.
testdrive/ index.php webbapplikationens startskript assets/ innehåller publicerade resursfiler css/ innehåller CSS-filer images/ innehåller bildfiler themes/ innehåller applikationsteman protected/ innehåller åtkomstskyddade applikationsfiler yiic yiic kommandoradsskript yiic.bat yiic kommandoradsskript för Windows commands/ innehåller egna/anpassade 'yiic'-kommandon shell/ innehåller egna/anpassade 'yiic shell'-kommandon components/ innehåller (egna) återanvändningsbara komponenter MainMenu.php widgetklassen 'MainMenu' Identity.php klassen 'Identity' som används för autenticering views/ innehåller vyfiler som tillhör widgetklasser mainMenu.php vyfil som tillhör widgetklassen 'MainMenu' config/ innehåller konfigurationsfiler console.php konfiguration för konsolapplikationer main.php konfiguration för webbapplikationer controllers/ innehåller filer med kontrollerklasser SiteController.php standardkontrollerklassen extensions/ innehåller tredjepartstillägg messages/ innehåller översatta systemmeddelanden models/ innehåller modellklassfiler LoginForm.php modellen (av formtyp) för 'login'-åtgärden ContactForm.php modellen (av formtyp) för 'contact'-åtgärden runtime/ innehåller tillfälliga genererade filer views/ innehåller kontrollervy- och layoutfiler layouts/ innehåller layoutfiler main.php standardlayout för alla vyer site/ innehåller vyfiler för 'site'-kontrollern contact.php vyn för 'contact'-åtgärden index.php vyn för 'index'-åtgärden login.php vyn för 'login'-åtgärden system/ innehåller systemvyfiler
De flesta webbapplikationer backas upp av databaser. Vår testkörningsapplikation
utgör inget undantag. För att använda en databas måste vi visa applikationen hur
den skall göra för att ansluta. Detta sker genom att ändra applikationens
konfigurationsfil WebRoot/testdrive/protected/config/main.php
, så som visas nedan:
return array(
......
'components'=>array(
......
'db'=>array(
'connectionString'=>'sqlite:protected/data/source.db',
),
),
......
);
Ovan läggs ett db
-element till i components
, vilket instruerar
applikationen att ansluta till SQLite-databasen
WebRoot/testdrive/protected/data/source.db
när så erfordras.
Märk: För att använda Yii:s databasfiness, måste vi aktivera PHP PDO-tillägget samt det drivrutinsspecifika PDO-tillägget. Testkörningsapplikationen behöver ha
php_pdo
ochphp_pdo_sqlite
-tilläggen igång.
Vidare behöver en SQLite-databas prepareras så att ovanstående konfiguration kan komma i kraft. Genom att använda något SQLite administreringsverktyg kan vi skapa en databas med följande schema:
CREATE TABLE User ( id INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT, username VARCHAR(128) NOT NULL, password VARCHAR(128) NOT NULL, email VARCHAR(128) NOT NULL );
Märk: Om MySQL-databas används skall
AUTOINCREMENT
bytas motAUTO_INCREMENT
i ovanstående SQL.
För enkelhets skull skapas bara en enda tabell, User
, i databasen. SQLite
databasfilen sparas som WebRoot/testdrive/protected/data/source.db
. Lägg märke
till att webbservern behöver ha skrivrättighet till både filen och dess
katalog, ett krav av SQLite.
Nu till den roliga biten. Vi vill implementera CRUD-operationerna (create, read,
update och delete) för tabellen User
vi just skapat. Detta är även ett vanligt
förekommande krav i skarpa webbapplikationer.
I stället för omaket att skriva kod manuellt, använder vi återigen verktyget yiic
som hjälp för att generera den erforderliga koden åt oss. Denna process kallas även
för scaffolding. Öppna ett kommandoradsfönster och kör nedanstående kommandon,
% cd WebRoot/testdrive % protected/yiic shell Yii Interactive Tool v1.0 Please type 'help' for help. Type 'exit' to quit. >> model User generate User.php The 'User' class has been successfully created in the following file: D:\wwwroot\testdrive\protected\models\User.php If you have a 'db' database connection, you can test it now with: $model=User::model()->find(); print_r($model); >> crud User generate UserController.php mkdir D:/wwwroot/testdrive/protected/views/user generate create.php generate update.php generate list.php generate show.php generate admin.php generate _form.php Crud 'user' has been successfully created. You may access it via: http://hostname/path/to/index.php?r=user
Ovan används shell
-kommandot i yiic
till att interagera med mallapplikationen.
Vid kommandoprompten kör vi två underkommandon: model User
och crud User
.
Den förra skapar en modellklass för tabellen User
, medan den senare läser
User
-modellen och genererar koden som implementerar CRUD-operationerna.
Märk: Det kan hända att felmeddelanden i stil med "...could not find driver" uppstår, även om systemkravskontrollen visar att PDO och motsvarande databasdrivrutin redan är aktiva. Om detta inträffar kan man försöka med att köra
yiic
-verktyget på följande sätt,% php -c path/to/php.ini protected/yiic.php shelldär
path/to/php.ini
representerar den rätta ini-filen för PHP.
Resultatet kan nu beskådas genom inmatning av URL:en:
http://hostname/testdrive/index.php?r=user
Detta kommer att presentera en lista med poster från tabellen User
. Eftersom
tabellen är tom kommer inget att visas för ögonblicket.
Klicka på länken New User
på sidan. Inloggningssidan kommer att visas (såvida
vi inte loggat in tidigare). Efter inloggningen presenteras ett
inmatningsformulär där en ny user-post kan läggas till. Fyll i formuläret och
klicka på knappen Create
. Om det förekommer något inmatningsfel kommer en
trevlig felmeddelanderuta visas, vilken förhindrar att felaktig inmatning
sparas. Tillbaka i listsidan skall den nyligen tillagda user-posten dyka upp i listan.
Upprepa ovanstående för att lägga till fler användare. Lägg märke till att listsidan automatiskt kommer att paginera user-posterna om de är för många för att visas på en sida.
Genom inloggning som administratör med admin/admin
, kan user:s administrationssida visas via följande URL:
http://hostname/testdrive/index.php?r=user/admin
Detta presenterar en trevlig tabell med user-poster. Sorteringskolumn kan väljas genom klick på respektive kolumnrubrik. Precis som för user-listsidan pagineras admin-sidan om det finns fler user-poster än de som ryms på en sida.
Allt detta uppnåddes utan att skriva en enda rad kod!
User-administreringssida
Skapa ny user-sida
Signup or Login in order to comment.