Framework CakePHP
Transkrypt
Framework CakePHP
Framework CakePHP Andrzej Rydzewski 30.04.2010 1. CakePHP CakePHP to jeden z najlżejszych i najpopularniejszych frameworków napisanych w języku obiektowym PHP. Framework udostępniony jest na otwartej licencji X11, dzięki czemu możliwe jest tworzenie oprogramowania komercyjnego wykorzystując owy framework. Twórcy pisząc CakePHP inspirowani byli frameworkiem Ruby on Rails, który został napisany w języku Ruby. Autorzy frameworka za główny cel jaki sobie postawili napisanie tak CakePHP aby służył do szybkiego budowania aplikacji webowych. 2. Podstawowe wiadomości korzystania z frameworka CakePHP Model MVC CakePHP korzysta z wzorca projektowego MVC. Wzorzec ten wymaga od programisty aby podzielił aplikację na trzy warstwy: – Model (ang. Model) – Widok (ang. View) – Kontroler (ang. Controller) Model odpowiada za pobieranie i zapis danych np. w bazie danych. Widok wyświetla dane dla użytkownika aplikacji. Kontroler jest częścią logiczną, która jest wywoływana jako pierwsza. W zależności jakie dane użytkownik chce uzyskać kontroler może wysłać zapytanie do modelu aby ten pobrał dane z bazy danych. Zwrócone dane kontroler może przetworzyć jeżeli tego wymaga widok. Zmodyfikowane dane (jeżeli tego wymagał widok) przekazywane są dla widoku. Framework CakePHP narzuca konwencje nazw tabel i klas. Wszystkie nazwy powinny być pisane w języku angielskim. Konwencja nazewnictw Nazwy tabel powinny zaczynać się małą literą oraz być w liczbie mnogiej. Tabele nazywane z dwóch lub większej liczby słów, powinny być rozdzielone znakiem podkreślenia np. 'latest_article'. Pola w tabeli natomiast powinny być liczbie pojedynczej. Plik reprezentujący dany model powinien zostać napisany w katalogu 'app/models'. Nazwa pliku powinna zaczynać się małą literą i wyrażona w liczbie pojedynczej np. dla tabeli 'posts' nazwa pliku to 'post.php.' Klasa modelu ma również liczbę pojedynczą jak nazwa pliku jednak powinna zaczynać się dużą literą. Klasa kontrolera powinna zaczynać się dużą literą i wyrażona w formie mnogiej. Do nazwy trzeba dodać przedrostek 'Controller'. Dla tabeli 'posts' będzie to nazwa klasy 'PostsController'. Plik klasy należy zapisać w katalogu 'app/controllers' pod nazwą 'nazwa_tabeli_controller.php', dla tabeli 'posts' plik będzie posiadać nazwę 'posts__controller.php'. Nazwa pliku widoku powinna być taka sama jak nazwa funkcji w kontrolerze, np. dla funkcji 'index' kontrolera 'posts', plik zapisany będzie w katalogu 'app/view/posts' pod nazwa 'index.ctp'. 1 3. Instalacja frameworka Aby zacząć pracę z frameworkiem należy pobrać źródła frameworka ze strony domowej projektu http://cakephp.org. Ściągnięte źródła zależy rozpakować w docelowym katalogu wyświetlania strony internetowej, np. dla systemu Ubuntu Gnu/Linux w wersji 10.04 jest to katalog /var/www. Aby można było skorzystać z danego frameworka należy go uprzednio odpowiednio skonfigurować. Pierwszym krokiem jest zmiana uprawnień zapisu do katalog app/tmp. Dla systemu Gnu/Linux to polecenie: chmod o+w app/tmp W pliku konfiguracyjnym frameworka CakePHP app/config/core.php należy zmienić dane dotyczące szyfrowania danych. Należy odszukać linie która zawiera słowo 'Security.salt' i zmienić na własną. Przykładowa linia: Configure::write('Security.salt', 'SDFJFJfkasjfjpasfjlasdf@#$@RU*Fpskflasfu87'); Ostatnim krokiem jaki należy wykonać aby można było korzystać z frameworka to konfiguracja połączenia z baza danych. Aby tego dokonać wystarczy skopiować przykładowy plik utworzony przez programistów i odpowiednio go wypełnić. cp app/config/database.php.default appt/config/database.php Przykładowa konfiguracja połączenia z baza danych: class DATABASE_CONFIG { var $default = array( 'driver' => 'mysql', /* nazwa sterownika bazy z jaką framework będzie się komunikować */ 'persistent' => false, 'host' => 'localhost', /* nazwa hostu z jaką framework będzie łączyć się */ 'login' => 'rydz', /* nazwa użytkownika który ma dostęp do konfigurowanej bazy */ 'password' => '377WKEHm7zVSby5U', /*hasło do bazy */ 'database' => 'cake', /* nazwa bazy danych */ 'prefix' => '', ); }?> 4. Korzystanie z CakePHP W dalszej części zaprezentuję jak korzystać z frameworka CakePHP. Zostanie to przedstawione dla przykładowej bazy o nazwie 'cake' (wcześniej była pokazana konfiguracja tej bazy), która zwiera jedną tabele o nazwie 'posts'. Tabela składa się z trzech pól: – id – przechowuje numer identyfikacyjny rekordu – title – tytuł wiadomości Zdjęcie 1. Schemat tabeli 'posts' 2 – body – treść wiadomości Pierwszym krokiem jaki trzeba wykonać to poinformowanie CakePHP o tym, że tabele istnieją. Aby tego dokonać trzeba utworzyć plik pod nazwa 'post.php' w katalogu 'app/models' o treści podanej poniżej: <?php class Post extends AppModel { var $name = 'Post'; } ?> Klasa 'Post' musi dziedziczyć po klasie AppModel. Zmienna '$name' jest opcjonalna. Należy z tej zmiennej korzystać jeżeli aplikacja będzie korzystać z języka PHP w wersji 4. Kolejnym krokiem jest utworzenie pliku z klasa kontrolera. Plik powinien nazywać się 'posts_controller.php', a jego przykładowa treść została zaprezentowana poniżej: <?php class PostsController extends AppController { var $name = 'Posts'; function index(){ $this->set('posts', $this->Post->find('all')); } } ?> Jak można zauważyć nazwa klasy składa się z nazwy tabeli z dodanym słowem 'Controller'. Klasa dziedziczy po globalnej klasie AppController. W kontrolerze została zdefiniowana funkcja o nazwie 'index'. Posłuży ona do wyświetlenia wszystkich wiadomości z tabeli 'posts'. Aby można było wyświetlić wiadomości funkcja przekazuje zmienną '$posts' dla widoku. Do pobrania wiadomości z tabeli posłużyłem się funkcją 'find', która przyjmuje pierwszy parametr 'all', oznacza to, że funkcja ma zwrócić wszystkie dane z tabeli 'posts'. Do wyświetlenia wiadomości trzeba utworzyć widok. Plik widoku należy napisać w katalogu 'app/views/posts' pod nazwa index.ctp. Przykładowa treść pliku: <?php foreach($posts as $post): ?> <p><?php echo $post['Post']['title']; ?></p> <p style='margin-left: 10px'><?php echo $post['Post'] ['body']; ?></p> <hr><br> <?php endforeach; ?> Pliki ctp mogą zawierać znaczki (X)HTML i bloki kodu napisanego w języku PHP. Jak widać na listingu, do wyświetlenia wszystkich wiadomości użyłem funkcji z języka PHP. Funkcja foreach przechodzi iteracyjne po zmiennej '$posts', która jest typu tablicy. W każdej iteracji przypisuje do zmiennej '$post' dane typu tablicowego. Dane wyświetlane są przez funkcje 'echo'. Napisanie pliku widoku, było ostatnim krokiem do tego aby można było wyświetlić dane z tabeli 'posts'. W przeglądarce internetowej wystarczy wejść na adres aplikacji dodając do adresu nazwę kontrolera (np. http://localhost/posts) i oczom powinien ukazać się podobny widok do tego przedstawionego na zdjęciu 2. 3 Zdjęcie 2. Widok wiadomości 5. Wnioski Pisanie aplikacji przy wykorzystaniu frameworka CakePHP na pierwszy rzut oka może wydawać się skomplikowane. Programista może poczuć się ograniczony przez narzucenie z góry nazewnictwa klas i tabel, jednak z czasem korzystania z tego frameworka zauważy, że pisanie aplikacji z wykorzystaniem CakePHP jest znacznie szybsze. 4