Framework CakePHP

cakephpCakePHP jest darmowym frameworkiem1 do szybkiego tworzenia aplikacji webowych, który został napisany w języku PHP. Pierwszą wersja frameworka została napisana przez Michała Tatarynowicza w roku 2005, zaś obecnie jego rozwojem zajmuje się Cake Software Foundation, Inc. Framework posiada wiele istotnych zalet, do których zaliczyć można prostotę, świetną dokumentacją, wiele dostępnych wtyczek, czy dobre wsparcie ze strony społeczności. Ten kurs dotyczy wersji 3 frameworka.Framework jest zbudowany w oparciu o wzorzec MVC2, czyli w uproszczeniu stwierdzić można, że programowanie odbywa się z zachowaniem separacji kodu na następujące warstwy3:

  1. Model (Model) – interakcja z bazą danych (pobieranie zawartości tabel, modyfikacja rekordów, usuwanie);
  2. Widok (View) – wyświetla w określony sposób wyniki pobrane z bazy danych na stronie;
  3. Kontroler (Controller) – przetwarza dane z modelu i przygotowuje je do wyświetlenia w widoku.

Zasada działania polega na wysłaniu przez użytkownika żądania do serwera, za pomocą adresu ww.adres.pl/kontroler/akcja. Po odebraniu przez dyspozytora (Dispatcher), żądanie zostaje przeanalizowane i na tej podstawie zostaje określone, który kontroler oraz akcja ma być załadowana i wykonana. Kolejnym etapem jest wykorzystanie warstwy modelu, w którym w zależności od potrzeby, może zostać załadowany jeden, lub więcej modeli4. Na tym etapie tworzone jest zapytanie do bazy danych i przetwarzanie wyników. Kolejnym etapem jest przetworzenie danych przez kontroler, w którym pobrane dane zostają zapisane do zmiennych (tablicowych) i przekazane do widokowi. Ostatnim etapem jest „opakowywanie” danych w kod HTML przez widok i wyświetlenie na stronie internetowej5.

typical-cake-request

Typowy cykl CakePHP rozpoczyna się od żądania strony lub zasobu aplikacji przez użytkownika. W wysokim poziomie, każde żądanie składa się z następujących etapów:

  1. Moduł rewrite_url serwera WWW kieruje żądanie webroot/index.php.
  2. Aplikacja jest uruchomiona i powiązana z HttpServer.
  3. Zainicjowane są middleware (dodatkowe oprogramowanie pośredniczące).
  4. Żądanie i odpowiedź są walidowane pod kątem błędów i routowane.
  5. W przypadku braku odpowiedzi zwracane są zwracane z middleware a żądanie zawiera informacje o routingu, wyznaczany jest kontroler jego akcja.
  6. Akcja kontrolera współpracuje z wymaganymi modelami i komponentami.
  7. Delegacja kontrolera tworzy odpowiedzi dla widoku, by wygenerować dane zgodne w danymi modeli.
  8. Widok wykorzystuje Helpery (dodatki pomocnicze) do generowania nagłówka i zawartości strony.
  9. Odpowiedź jest wysyłana z powrotem przez Middleware.
  10. Serwer HttpServer wysyła odpowiedź do serwera WWW.

Kontroler

Warstwa kontrolera odpowiada za obsługę żądań od użytkowników i jest odpowiedzialna za renderowanie odpowiedzi przy pomocy modeli i widoków. Kontroler można wyobrazić sobie jako menedżer, który gwarantuje, że wszystkie zasoby potrzebne do realizacji zadania są przekazywane do odpowiednich pracowników. Odpowiada także za autoryzację zgodnie z zasadami uwierzytelnienia lub autoryzacji, pobieranie danych lub przetwarzanie danych deleguje do modelu, wybiera rodzaj danych prezentacji i renderuje dane do warstwy widoku.

Przykładowy kontroler może wyglądać tak:

public function add()
{
    $user = $this->Users->newEntity();
    if ($this->request->is('post')) {
        $user = $this->Users->patchEntity($user, $this->request->data);
        if ($this->Users->save($user, ['validate' => 'registration'])) {
            $this->Flash->success('Zostałeś zarejestrowany poprawnie.');
        } else {
            $this->Flash->error('Błąd podczas zapisu do bazy danych.');
        }
    }
    $this->set('user', $user);
}

Powyższy przykład pokazuje, jak można w sposób jawny wygenerować widok. Konwencje nazw CakePHP decydują o wyborze widoku i przesyłają do niego lub odbierają zestawy danych.

Model

Warstwa modelu reprezentuje tę część aplikacji, która implementuje logikę biznesową i jest odpowiedzialny za pobieranie danych i przekształcenie go w odpowiednio przystosowanych danych dl aaplikacji. Obejmuje przetwarzanie, sprawdzanie, kojarzenie (relacje) lub inne zadania związane z obsługi danych.

Widok

Warstwa widoku prezentuje model danych i jest odpowiedzialny za wykorzystanie informacji, którymi dysponuje. Dla przykładu widok może wykorzystać model danych i tworzyć szablon HTML zawierający wyniki. Widok wykorzystuje szereg rozszerzeń, takich jak wyświetlanie zmiennych (<?php echo $variable; ?>), elementy (bloki), pojedyncze komórki dla możliwości ponownego użycia logiki prezentacji. Widok nie jest ograniczony tylko do HTML lub reprezentacji danych jako tekst, lecz może być używany do dostarczania wspólnych formatów danych, takich jak JSON czy XML, a dzięki architekturze wtyczek, także w innych for,matach, jak na przykład CSV.

Model MVC posiada kilka istotnych zalet, z których wymienić można brak zależności modelu od widoków, ponieważ model jest od nich niezależny, zaś w aplikacji może współistnieć wiele widoków prezentujących te same dane na różne sposoby. Inną zaletą jest łatwiejsza rozbudowa widoków, szczególnie w przypadkach, gdzie interfejs użytkownika oraz warstwa prezentacji zmieniają się o częściej, niż logika biznesowa aplikacji. Ponieważ mamy do czynienia z rozdzieleniem tych części, modyfikacje w widoku (czyli w wyglądzie strony) nie mają wpływu na kluczową część systemu6.

Należy jednocześnie wspomnieć o wadach implementacji modelu MVC, które wprowadzają dodatkową warstwę abstrakcji oraz różne sposoby interakcji, czyniąc w ten sposób aplikację potencjalnie trudniejszą do testowania oraz kosztowne zmiany modelu, gdyż model nie jest zależny od widoku, stąd programiści rozwijający tę część aplikacji nie muszą przejmować się zależnościami w przeciwnym kierunku. Wynika z tego, że w przypadku, gdy interfejs modelu ulega częstym zmianom, oznacza to konieczność modyfikacji wszystkich korzystających z niego widoków. Kolejną wadą jest trudność w testowanie widoków, które jako zależne od modeli, mogą zawierać także własną, dodatkową logikę. Stąd też testowanie złożonych interfejsów użytkownika uważane jest za zadanie trudne7.

Wymagania frameworka

Do prawidłowego działania, CakePHP wymaga serwera HTTP, interpretera PHP wraz z rozszerzeniem mbstring oraz intl oraz serwera SQL (mySql lub MS SQL). W tym miejscu jednak warto napisać, że serwer HTTP wcale nie jest niezbędny, ponieważ framework posiada wbudowany serwer HTTP, który można użyć w środowisku developerskim. Tak więc istnieją trzy możliwości konfiguracji środowiska programistycznego jeśli chodzi o serwer WWW: jako serwer w środowisku Windows można użyć zarówno wbudowanego serwera IIS. Równie dobrze można użyć serwera Apache – np. z pakietu XAMPP. Ostatnim i na początek nie gorszym rozwiązaniem jest użycie serwera wbudowanego.

Wbudowany serwer WWW można uruchomić z linii poleceń za pomocą polecenia bin/cake server. Aplikacja będzie wówczas dostępna w przeglądarce pod adresem http://localhost:8765. To wbudowane rozwiązanie jest idealne w przypadku, gdy z jakiegoś powodu nie decydujemy się na instalowanie serwera WWW. Warto jednak pamiętać, że serwer wewnętrzny sprawdzi się przy tworzeniu oprogramowania, jednak nie należy wykorzystywać go w środowisku produkcyjnym. Poza tym, należy wcześniej pobrać i zainstalować „ręcznie” interpreter PHP oraz opcjonalnie – serwer baz danych MySQL. Tak naprawdę serwer SQL również nie jest absolutnie niezbędny, ponieważ zamiast niego, można skorzystać z doskonałego silnika Sqlite, który jest bardzo dobrze wspierany przez framework i wystarczy na potrzeby nauki programowania, jednak przykłady opisywane w niniejszej publikacji dotyczą serwera mySQL.

Odnośnik: Instalacja PHP w Windows

———————————————————

1Framework to szkielet do budowy aplikacji, który definiuje strukturę aplikacji oraz ogólny mechanizm jej działania, a także dostarcza zestaw komponentów i bibliotek ogólnego przeznaczenia do wykonywania określonych zadań.
2Dalej: Wzajemnie połączony Model, Widok, Kontroler, jako wzorzec służący do organizacji struktury aplikacji.
3Więcej: http://antyweb.pl/zjesc-ciasteczko-i-miec-ciasteczko-czyli-szybkie-wprowadzenie-do-cakephp (stan na 05.07.2016).
4CakePHP nie zawsze wymaga wykorzystania warstwy modelu.
5Tamże.
6Więcej: https://pl.wikipedia.org/wiki/Model-View-Controller (stan na 05.07.2016).
7Tamże.

712total visits,1visits today

Tagi , , .Dodaj do zakładek Link.

Dodaj komentarz

Twój adres email nie zostanie opublikowany. Pola, których wypełnienie jest wymagane, są oznaczone symbolem *

26 + = 27

This site uses Akismet to reduce spam. Learn how your comment data is processed.