Also available in these languages:
DeutschEnglishEspañolFrançaisעִבְרִיתBahasa Indonesia日本語polskiPortuguêsRomâniaРусскийsvenska简体中文

Tworzenie pierwszej aplikacji

Po to by nabyć podstawowych doświadczeń w pracy z Yii pokażemy w tym rozdziale jak utworzyć naszą pierwszą aplikację. Użyjemy potężnego narzędzia yiic, które pozwala automatyzować generowanie kodu dla określonych zadań. Przyjmujemy tu konwencję w myśl której YiiRoot jest katalogiem, w którym zainstalowano Yii, a WebRoot to document root naszego web serwera.

Uruchom yiic z wiersza poleceń w następujący sposób:

% YiiRoot/framework/yiic webapp WebRoot/testdrive

Uwaga: uruchamiając yiic na Mac OS, Linuksie lub Uniksie będziesz może musiał zmienić uprawnienia pliku yiic tak, aby był on wykonywalny. Alternatywnie możesz użyć tego narzędzia w sposób następujący:

% cd WebRoot/testdrive
% php YiiRoot/framework/yiic.php webapp WebRoot/testdrive

This will create a skeleton Yii application under the directory WebRoot/testdrive. The application has a directory structure that is is needed by most Yii applications.

Without writing a single line of code, we can test drive our first Yii application by accessing the following URL in a Web browser:

http://hostname/testdrive/index.php

Jak widać aplikacja składa się z czterech stron: strony domowej, o nas, kontaktowej i logowania. Strona domowa prezentuje pewne informacje na temat samej aplikacji oraz statusu logowania użytkownika. Strona kontaktowa zawiera formularz kontaktowy, poprzez który użytkownik może wysłać swoje zapytanie. Strona logowania pozwala użytkownikowi na uwierzytelnienie, poprzedzającą dostęp do uprzywilejowanych zasobów. Poniższe zrzuty ekranów prezentują więcej szczegółów.

Strona domowa

Strona domowa

Strona kontaktowa

Strona kontaktowa

Strona kontaktowa z błędami wej.

Strona kontaktowa z błędami wej.

Strona kontaktowa zatwierdzona pomyślnie

Strona kontaktowa zatwierdzona pomyślnie

Strona logowania

Strona logowania

Poniższy diagram prezentuje strukturę naszej aplikacji. Szczegółowe informacje na temat tej struktury znajdziesz w dziale Konwencje.

testdrive/
   index.php                 skrypt startowy aplikacji internetowej
   index-test.php            plik skryptu startowego dla testów funkcjonalnych   
   assets/                   zawiera opublikowane zasoby plików
   css/                      zawiera pliki CSS
   images/                   zawiera pliki obrazów
   themes/                   zawiera tematy aplikacji
   protected/                zawiera chronione pliki aplikacji
      yiic                   skrypt yiic dla systemów Linux/Unix
      yiic.bat               skrypt yiic dla systemu Windows
      yiic.php               skrypt PHP linii poleceń      
      commands/              zawiera spersonalizowane polecenia 'yiic'
         shell/              zawiera spersonalizowane polecenia 'yiic shell'
      components/            zawiera komponenty wielokrotnego użytku
         Controller.php      klasa bazowa dla wszystkich klas kontrolerów
         Identity.php        klasa 'Identity', przeznaczona do celów uwierzytelnienia
      config/                zawiera pliki konfiguracyjne
         console.php         konfiguracja aplikacji konsolowej
         main.php            konfiguracja aplikacji webowej
         test.php            konfirguracja dla testów funkcjonalnych         
      controllers/           zawiera pliki klas kontrolera
         SiteController.php  domyślna klasa kontrolera
      data/                  zawiera przykładowe bazy danych
         schema.mysql.sql    schemat bazy danych dla przykładowej bazy danych MySQL
         schema.sqlite.sql   schemat bazy danych dla przykładowej bazy danych SQLite
         testdrive.db        plik przykładowej bazy danych SQLite         
      extensions/            zawiera rozszerzenia firm trzecich
      messages/              zawiera przetłumaczone komunikaty
      models/                zawiera pliki klas modeli
         LoginForm.php       model formularza dla akcji logowania
         ContactForm.php     model formularza kontaktowego
      runtime/               zawiera tymczasowo generowane pliki
      tests/                 zawiera skrypty testów      
      views/                 zawiera pliki widoku i układu (ang. layout) kontrolera
         layouts/            zawiera pliki układów (ang. layout) dla widoków
            main.php         podstawowy widok dzielony przez wszystkie strony
            column1.php      układ dla stron używających pojedynczej kolumny
            column2.php      układ dla stron używających dwóch kolumn
         site/               zawiera pliki widoków dla kontrolera 'site'
            pages/           zawiera "statyczne" strony
               about.php     widok dla strony "o nas" (ang. about)         
            contact.php      widok dla akcji 'contact'
            error.php        widok dla akcji 'error' (wyświetlającej zewnętrzne błędy)
            index.php        widok dla akcji 'index'
            login.php        widok dla akcji 'login'

Łączenie z bazą danych

Większość aplikacji webowych pracuje w oparciu o bazę danych. Nasz aplikacja testowa nie jest tu wyjątkiem. Aby użyć bazy danych musimy poinformować aplikację jak ma się z nią połączyć. Jest to realizowane przez plik konfiguracyjny WebRoot/testdrive/protected/config/main.php, co pokazujemy niżej:

return array(
    ......
    'components'=>array(
        ......
        'db'=>array(
            'connectionString'=>'sqlite:protected/data/testdrive.db',
        ),
    ),
    ......
);

Powyższy kod instruuje Yii, że aplikacja powina łączyć się z bazą danych SQLite WebRoot/testdrive/protected/data/testdrive.db jeśli zajdzie taka potrzeba. Zauważ, że baza danych SQLite jest już załączona do szkieletu aplikacji, który przed chwilą wygenerowaliśmy. Ta baza danych zawiera jedynie tabelę o nazwie 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
);

Jeśli chcesz używać bazy danych MySQL, powinieneś użyć załączonego pliku schematu MySQL
WebRoot/testdrive/protected/data/schema.mysql.sql aby utworzyć bazę danych.

Uwaga: Aby używać funkcjonalności bazodanowych Yii, potrzebujemy udostępnić rozszerzenie PHP PDO oraz rozszerzenia PDO dla poszczególnych sterowników. Dla aplikacji testowej, potrzebujemy włączyć oba rozszerzenia php_pdo oraz php_pdo_sqlite.

Implementowanie operacji CRUD

Ta część to czysta zabawa. Chcemy zaimplementować operacje CRUD (create, read, update i delete) dla tabeli User, którą dopiero co utworzyliśmy. Potrzebne są one też powszechnie w praktycznie tworzonych aplikacjach.

Zamiast męczyć się pisząc rzeczywisty kod możemy skorzystać z Gii potężnego przeglądarkowego generatora kodu.

Info: Gii jest dostępne od wersji 1.1.2. Przed tą wersją możemy używać wcześniej wspomnianego narzędzia yiic w celu osiągnięcia tego samego celu. Aby uzyskać więcej szczegółów, przejdź do Implementowania operacji CRUD z yii.

Konfigurowanie Gii

W celu używania Gii musimy najpierw wyedytować plik WebRoot/testdrive/protected/config/main.php, który znany jest jako plik konfiguracja plikacji:

return array(
    ......
    'import'=>array(
        'application.models.*',
        'application.components.*',
    ),
 
    'modules'=>array(
        'gii'=>array(
            'class'=>'system.gii.GiiModule',
            'password'=>'tutaj wprowadź hasło',
        ),
    ),
);

Następnie odwiedź URL http://hostname/testdrive/index.php?r=gii. Zostaniesz poproszony o wprowadzenia hasła, które powinno zgadzać się z tym, które przed chwilą wprowadziliśmy w powyższej konfiguracji aplikacji.

Generowanie modelu użytkownika

Po zalogowaniu się, kliknij na link Model Generator. Zostaniemy przeniesieni do następujacej strony generowania modelu,

Model Generator

Model Generator

W polu nazwy tabeli Table Name, wprowadź tbl_user. W polu klasy modelu Model Class wprowadź User. Następnie naciśnij przyciś podglądu Preview. Spowoduje to pokazanie nowy plik z kodem, który ma zostać wygenerowany. Teraz naciśnij przycisk generowania Generate. Nowy plik o nazwie User.php zostanie wygenerowany w katalogu protected/models. Jak opiszemy w dalszej części przewodnika, ta wygenerowana klasa modelu User pozwoli nam porozumiewywać się z tabelą bazy danych tbl_user w sposób obiektowy.

Generowanie kodu CRUD

Po utworzeniu pliku klasy modelu wygenerujemy kod który implementuje operacje CRUD na danych użytkownika. Wybieramy generator CRUD Crud Generator w Gii jak pokazano poniżej:

CRUD Generator

CRUD Generator

W polu modelu klasy Model Class wpisz User. W polu identyfikatora kontrolera Controller ID wpisz user (małymi literami). Następnie naciśnij przycisk podglądu Preview a następnie przycisk generowania Generate. Zakończyliśmy generowanie kodu CRUD.

Dostęp do stron CRUD

Nacieszmy się teraz efektami naszej pracy otwierając taki adres URL:

http://hostname/testdrive/index.php?r=user

Spowoduje to wyświetlenie listy użytkowników z tabeli tbl_user.

Kliknij przycisk Create User na tej stronie. Zostaniemy przeniesieni do strony logowania, o ile wcześniej nie zalogowaliśmy się. Po zalogowaniu widzimy formularz wprowadzania danych, który pozwoli nam wprowadzić nowego użytkownika. Wypełnij formularz i kliknij przycisk Create. Jeżeli wystąpił jakikolwiek błąd danych wejściowych pojawi się zgrabny komunikat o błędzie. Ustrzeże nas to od zapisania takich danych. Wracając na listę użytkowników powinniśmy zauważyć świeżo dodanego użytkownika.

Powtórz powyższe kroki aby dodać więcej użytkowników. Zauważ, że strona z listą użytkowników podlega automatycznej paginacji, jeżeli jest zbyt wiele rekordów do wyświetlenia na pojedynczej stronie.

Jeżeli zalogowaliśmy się jako administrator używając admin/admin, możemy odwiedzić stronę administrowania użytkownikami pod adresem:

http://hostname/testdrive/index.php?r=user/admin

Powyższe wywołanie spowoduje pokazanie się nam wpisów z użytkownikami przy użyciu ładnego formatu tabelarycznego. Możemy klikać w nagłówki komórek, aby uporządkować odpowiadającą mu kolumnę. Możemy klikać przyciski w każdym wierszu danych w celu wyświetlenia, aktualziacji lub usunięcia odpowiadającego im wiersza danych. Możemy przeglądać inne strony. Możemy również filtrować i wyszukiwać interesujących nas danych.

Wszystkie te praktyczne funkcjonalności nie wymagały od nas napisania choćby pojedynczej linijki kodu!

Strona administracji użytkownikami

Strona administracji użytkownikami

Strona tworzenia nowego użytkownika

Strona tworzenia nowego użytkownika
$Id: quickstart.first-app.txt 2125 2010-05-11 23:36:02Z alexander.makarow $
If you find any typos or errors in the tutorial, please create a Yii ticket to report it. If it is a translation error, please create a Yiidoc ticket, instead. Thank you.

Your Comment:

You may enter comment using Markdown syntax.

Please login with your forum account.
Note: you must have at least ONE forum post with your account.