- Komma igång
- Grunder
- Arbeta med formulär
- Arbeta med databaser
- Cachning
- Utvidgning av Yii
- Testning
- Speciella ämnen
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
yiickörs under Mac OS, Linux eller Unix, kan rättigheterna för filenyiicbehö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 fyra sidor: startsidan, "om"-sidan, kontaktsidan och inloggningssidan. Kontaktsidan presenterar ett kontaktformulär som användare kan fylla i för att skicka sina förfrågningar till webbadministratören 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.
Startsida

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
index-test.php startskript ör funktionell testning
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 för Unix/Linux
yiic.bat yiic kommandoradsskript för Windows
yiic.php yiic PHP-kommandoradsskript
commands/ innehåller egna/anpassade 'yiic'-kommandon
shell/ innehåller egna/anpassade 'yiic shell'-kommandon
components/ innehåller (egna) återanvändningsbara komponenter
Controller.php basklass för alla kontrollerklasser
Identity.php klassen 'Identity' som används för autenticering
config/ innehåller konfigurationsfiler
console.php konfiguration för konsolapplikationer
main.php konfiguration för webbapplikationer
test.php konfiguration för funktionell testning
controllers/ innehåller filer med kontrollerklasser
SiteController.php standardkontrollerklassen
data/ innehåller SQLite-databas för exempel
schema.mysql.sql DB-schema för MySQL-exempeldatabas
schema.sqlite.sql DB-schema för SQLite-exempeldatabas
testdrive.db SQLite-databasfil, exempeldatabas
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
tests/ innehåller testskript
views/ innehåller kontrollervy- och layoutfiler
layouts/ innehåller layoutfiler
main.php standardlayout för alla vyer
column1.php layout för sidor som använder en kolumn
column2.php layout for sidor som använder två kolumner
site/ innehåller vyfiler för 'site'-kontrollern
pages/ innehåller "statiska" sidor
about.php vyn för "about"-sidan
contact.php vyn för 'contact'-åtgärden
error.php vyn för 'error'-åtgärden (presenterar externa felmeddelanden)
index.php vyn för 'index'-åtgärden
login.php vyn för 'login'-åtgärden
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 gör man i applikationens konfigurationsfil
WebRoot/testdrive/protected/config/main.php, så som visas nedan:
return array( ...... 'components'=>array( ...... 'db'=>array( 'connectionString'=>'sqlite:protected/data/testdrive.db', ), ), ...... );
Ovanstående kod instruerar Yii om att applikationen skall ansluta till SQLite-databasen
WebRoot/testdrive/protected/data/testdrive.db när så erfordras. Notera att SQLite-databasen
redan är inkluderad i skelettet till applikation vi just genererat. Databasen innehåller endast
en enda tabell med namnet tbl_user:
CREATE TABLE tbl_user ( id INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT, username VARCHAR(128) NOT NULL, password VARCHAR(128) NOT NULL, email VARCHAR(128) NOT NULL );
Den som vill prova en MySQL-databas istället kan använda den medföljande MySQL-schemafilen
WebRoot/testdrive/protected/data/schema.mysql.sql för att skapa databasen.
Märk: För att Yii:s databasfiness skall gå att använda måste PHP:s PDO-tillägg samt det drivrutinspecifika PDO-tillägget aktiveras. För prova på-applikationen innebär detta att tilläggen
php_pdoochphp_pdo_sqliteskall vara igång.
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.1
Please type 'help' for help. Type 'exit' to quit.
>> model User tbl_user
generate models/User.php
generate fixtures/tbl_user.php
generate unit/UserTest.php
The following model classes are successfully generated:
User
If you have a 'db' database connection, you can test these models now with:
$model=User::model()->find();
print_r($model);
>> crud User
generate UserController.php
generate UserTest.php
mkdir D:/testdrive/protected/views/user
generate create.php
generate update.php
generate index.php
generate view.php
generate admin.php
generate _form.php
generate _view.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 tbl_user och crud User.
Den förra skapar en modellklass User för tabellen tbl_user, medan den senare
analyserar User-modellen och genererar koden som implementerar motsvarande CRUD-operationer.
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.inirepresenterar 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 tbl_user.
Klicka på knappen Create 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 user-posterna i ett trevligt tabulärt format. Sorteringskolumn kan väljas genom klick på respektive kolumnrubrik. Genom klick på knapparna i varje rad kan vi visa i formulär, uppdatera eller ta bort den motsvarande raden med data. Vi kan översiktligt se olika sidor samt filtrera och söka efter data av intresse.
Allt detta uppnåddes utan att skriva en enda rad kod!
User-administreringssida

Skapa ny user-sida
