0 follower

Skapa en första Yii-applikation

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 filen yiic 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

Starsida

Kontaktsida

Kontaktsida

Kontaktsida med inmatningsfel

Kontaktsida med inmatningsfel

Kontaktsida med korrekt inmatning

Kontaktsida med korrekt inmatning

Inloggningssida

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

1. Anslutning till databas

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 och php_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 mot AUTO_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.

2. Implementering av CRUD-operationer

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 shell

dä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

User-administreringssida

Skapa ny user-sida

Skapa ny user-sida