- Początek
- Podstawy
- Praca z formularzami
- Praca z bazami danych
- Buforowanie podręczne (ang. caching)
- Rozszerzanie Yii
- Testowanie
- Tematy specjalne
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
yiicna Mac OS, Linuksie lub Uniksie będziesz może musiał zmienić uprawnienia plikuyiictak, 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 kontaktowa

Strona kontaktowa z błędami wej.

Strona kontaktowa zatwierdzona pomyślnie

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'
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_pdoorazphp_pdo_sqlite.
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 znów skorzystać z potężnego
narzędzia yiic, które automatycznie wygeneruje dla nas kod. Ten proces znany
jest jako scaffolding (tworzenie rusztowania).
Otwórz okno poleceń i wykonaj listę poleceń znajdujących się poniżej:
% 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
Powyżej używamy polecenia yiic shell dla interakcji z naszą szkieletową
aplikacją. W wierszu poleceń wykonujemy dwa polecenia: model User tbl_user i crud User.
Pierwsze z nich generuje klasę modelu nazwaną User dla tabeli tbl_user, kolejne odczytuje
ten model i generuje kod implementujący odpowiadające mu operacje CRUD.
Uwaga: mogą pojawić się błędy typu "...could not find driver" (nie mogę odnaleźć sterownika), nawet gdy weryfikacja wymagań pokaże, że uruchomiłeś już PDO i odpowiadający mu sterownik. Jeżeli się to zdarzy możesz spróbować uruchomić
yiicw sposób następujący:% php -c path/to/php.ini protected/yiic.php shellgdzie
path/to/php.inireprezentuje sobą ścieżkę do właściwego pliku PHP ini.
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 tworzenia nowego użytkownika
