0 follower

Scaffolding

Tworzenie, czytanie, aktualizowanie oraz usuwanie (CRUD, od ang. create, read, update, delete) są czterema podstawowymi operacjami dla trwałych magazynów danych (ang. persistent storage). W naszej aplikacji
blogowej głównym zadaniem jest implementacja tych operacji CRUD zarówno dla wiadomości jak i komentarzy. W części tej, będziemy używali narzędzia yiic aby wykonać to zadanie. Proces ten znany jest również jako scaffolding.

Otwórz okno poleceń i wykonaj następujące polecenia:

% /wwwroot/yii/framework/yiic shell /wwwroot/blog/index.php
Yii Interactive Tool v1.0
Please type 'help' for help. Type 'exit' to quit.
>> model User
......
>> model Post
......
>> model Tag
......
>> model Comment
......
>> crud Post
......
>> crud Comment
......
>> exit

Info: Część instalacji PHP może używać różnych plików php.ini dla parsera PHP wiersza poleceń (CLI). W rezultacie, podczas wykonywania powyższych poleceń yiic, możesz spotkać się z błędami takimi jak
"YiiBase::include(PDO.php): failed to open stream..." czy też "...could not find driver". Sprawdź dokładnie twoją konfigurację CLI PHP poprzez wywołanie następującego polecenia:

php -r "phpinfo();"

Wynik powyższego polecenia pokaże, który plik php.ini jest używany i które rozszerzenia są załadowane. Jeśli nieprawidłowy plik php.ini jest w użyciu, możesz użyć następującego polecenia aby bezpośrednio określić poprawny plik php.ini, który powinien zostać użyty:

php -c php.ini /wwwroot/yii/framework/yiic.php shell /wwwroot/blog/index.php

Powyższe polecenie wykonuje dwa zadania. Pierwsze, polecenie model generuje plik klasy model dla ja każdej z tabel bazy danych. Drugie, polecenie crud generuje kod potrzebny przez operacje CRUD dla modeli wiadomości Post i komentarza Comment.

Możemy przetestować wygenerowany kod poprzez użycie następujących URLi

http://www.example.com/blog/index.php?r=post
http://www.example.com/blog/index.php?r=comment

Zauważ, że funkcjonalności związane z wiadomościami oraz komentarzami zaimplementowane w wygenerowanym kodzie są całkowicie niezależne od siebie. Ponadto podczas tworzenia wiadomości czy też komentarza, musimy wprowadzić informacje takie jak ID autora authId czy też czas utworzenia createTime, które w prawdziwej aplikacji powinny być ustawiane przez program. Nie przejmuj się, poradzimy sobie z tymi problemami w następnym kroku milowym. Na chwilę obecną powinniśmy być całkiem usatysfakcjonowani, gdyż prototyp zawiera już większość funkcjonalności, które chcemy zaimplementować dla naszej aplikacji.

Aby przygotować się do następnego kroku, przypatrzmy sie plikom wygenerowanym przez powyższe polecenia. Wszystkie pliki znajdują się w katalogu /wwwroot/blog/protected. Dla wygody pogrupowaliśmy je w pliki modelu, pliki kontrolera oraz pliki widoku:

  • pliki modelu:

    • models/User.php zawiera klasę użytkownika user, która dziedziczy z klasy CActiveRecord, którą można użyć aby uzyskać dostęp do tabeli bazy danych User;
    • models/Post.php zawiera klasę wiadomości Post, która dziedziczy z klasy CActiveRecord, którą można użyć aby uzyskać dostęp do tabeli bazy danych Post;
    • models/Tag.php zawiera klasę otagowania Tag, która dziedziczy z klasy CActiveRecord, którą można użyć aby uzyskać dostęp do tabeli bazy danych Tag;
    • models/Comment.php zawiera klasę komentarza Comment, która dziedziczy z klasy CActiveRecord, którą można użyć aby uzyskać dostęp do tabeli bazy danych Comment;
  • pliki kontrolera:

    • controllers/PostController.php zawiera klasę PostController, która jest kontrolerem odpowiedzialnym za wszystkie operacje CRUD na wiadomościach;
    • controllers/CommentController.php zawiera klasę CommentController, która jest kontrolerem odpowiedzialnym za wszystkie operacje CRUD na komentarzach;
  • pliki widoku:

    • views/post/create.php jest plikiem widoku, który reprezentuje formularz HTML do tworzenia nowej wiadomości;
    • views/post/update.php jest plikiem widoku, który reprezentuje formularz HTML do aktualizowania istniejącej wiadomości;
    • views/post/show.php jest plikiem widoku, który wyświetla szczegółowe informacje o wiadomości;
    • views/post/list.php jest plikiem widoku, który wyświetla listę wiadomości;
    • views/post/admin.php jest plikiem widoku, który wyświetla wiadomości w tabelce wraz z poleceniami administracyjnymi;
    • views/post/_form.php jest plikiem widoku częściowego, który wyświetla formularz HTML służący zbieraniu informacji o wiadomości. Jest on osadzony w widokach create oraz update.
    • podobny zestaw plików widoków został również wygenerowany dla komentarza.

W celu lepszego zrozumienia jak powyższe pliki są używane, pokażemy przepływ zadań w aplikacji, które występują w naszej aplikacji podczas wyświetlani listy wiadomości:

  1. Skrypt wejściowy jest wykonywany przez serwer, w skrypcie tym tworzona jest i inicjalizowana instancja aplikacji, służąca do obsługi żadań;
  2. Aplikacja tworzy instancję kontrolera PostController i wywołuje go;
  3. Instancja PostController wykonuje żądaną akcję list poprzez wywołanie swojej metody actionList();
  4. Metoda actionList() odpytuje bazę danych, aby zwrócić listę najnowszych wiadomości;
  5. Metoda actionList() wyświetla widok list wypełniony danymi wiadomości.