Dobre przepisy do CakePHP
Po co w ogóle Framework?
Nie wymyślajmy koła na nowo!
Po co w ogóle Framework?
Po co w ogóle Framework?
• Większość aplikacji na samym początku składa się z tych samych elementów:
• Logowanie
• Uprawnienia użytkowników
• Wysyłanie e-maili
• Panel administracyjny
Po co w ogóle Framework?
• Dodatkowo potrzebujemy komponenty odpowiadające za:
• Wykonywanie zapytań do bazy danych
• Cachowanie
• Możliwość wykonywania cyklicznych operacji – cronjob
• Zarządzanie Session i Cookies
• ...
MVCModel – View – Controller
Controller
ViewModel
Controller
ViewModel
Controller
ViewModel
Controller
ViewModel
Ruby on Rails jako inspiracja
Ruby on Rails jako inspiracja
• W 2005 roku pojawił się framework Ruby on Rails
• Frameworki PHP inspirowane RoR:
• CakePHP
• Symfony
• PHP on Trax
• Code Igniter
• Biscuit
• Pipeline
CakePHP – zalety i wady
CakePHP – zalety i wady
• Szybka instalacja i niewielka ilość plików konfiguracyjnych
• Prosty w nauce
• Pokrycie kodu testami: 100%
• Wygodne korzystanie z Cache
• Bake
• Jednolity kod
CakePHP – zalety i wady
• Model, Model, jeszcze raz Model
• Można rozwiazać poprzez integracje z Doctrine
• Enkapsulacja (brak public, protected, private)
• ...
Podstawy CakePHP
• MVC
• Components
• Helpers
• Behaviours
• Plugins
• Webroot
Podstawy CakePHP
• Nazewnictwo:
• Nazwa tabeli i prefix controlleraliczba mnoga (clients, users, ...)
• Nazwa modeluliczba pojedyńcza (Client, User, ...)
Podstawy CakePHP
• AppController
• AppModel
• AppHelper
Podstawy CakePHP – callbacks
• Controller
• beforeFilter
• beforeRender
CakePHP – odwzorowanie relacji
• Proste i przyjemne gdy przestrzegamy konwencji w nazewnictwie
• Automatyczne JOIN
• counterCache
Najczęściej popełniane błędy
• Ładowanie masę modeli automatycznie przy tworzeniu Controllerze poprzez parametr $uses.
• ClientContact i ClientTalk niepotrzebne – dostępne poprzez relacje Client:$this->Client->ClientContact->find('all');
• Pozostałe classy ładujemy poprzez $this->loadModel('Setting');
• Sygnał alarmowy dla więcej niż 2 modeli w $uses
• 1 prosty model ładowany w AppController do wykonywania query() i ...
Najczęściej popełniane błędy
• Ładowanie masę modeli automatycznie przy tworzeniu Controllerze poprzez parametr $uses.
• Nie używanie helperów $this->Formi $this->Html w widokach.
Najczęściej popełniane błędy
• Ładowanie masę modeli automatycznie przy tworzeniu Controllerze poprzez parametr $uses.
• Nie używanie helperów $this->Formi $this->Html w widokach.
• Podawanie gotowego adresu url jako parametr do $this->Html->link() lub $this->Html->url() zamiast parametrów.
Najczęściej popełniane błędy
• Ładowanie masę modeli automatycznie przy tworzeniu Controllerze poprzez parametr $uses.
• Nie używanie helperów $this->Formi $this->Html w widokach.
• Podawanie gotowego adresu url jako parametr do $this->Html->link() lub $this->Html->url() zamiast parametrów.
• Brak domyślnych wartości dla parametrów do metod w controller.
• Na wypadek gdyby zamiast /client/edit/10 zostanie wysłane zapytanie do /client/edit
• Unikamy ostrzeżenia ze strony PHP:Warning (2): Missing argument 1 for ClientsController::edit() [APP/controllers/clients_controller.php, ...]
• Zapewniamy poprawną obsługę wyjątkowych przypadków
Dodatkowe porady
• Wygodne ustawienie AppModel
Dodatkowe porady
• Wygodne ustawienie AppModel
• Cachowanie skomplikowanych zapytańi wyników przekazanych do stronicowania.
Dodajemy tą metodę do AppModel nie AppController
Metoda _idBasedOnArgs() zwraca unikalny identyfikator wywołania metody z podanymi parametrami.
Dodatkowe porady
• Wygodne ustawienie AppModel
• Cachowanie skomplikowanych zapytańi wyników przekazanych do stronicowania.
• Wrappowanie Helperów
Dodatkowe porady
• Wygodne ustawienie AppModel
• Cachowanie skomplikowanych zapytańi wyników przekazanych do stronicowania.
• Wrappowanie Helperów
• Gruby Model – Chudy Controller (Fat Models Skinny Controllers)