Podstawowe informacje o pierwszej części trylogii MVC w CakePHP…

WSTĘP

Model w CakePHP wykorzystywany jest głównie do przeprowadzania operacji na danych. Źródłem danych, może być dowolnie wybrana przez nas baza danych (definiujemy to za pomocą poznanego przy instalacji pliku konfiguracyjnego – database.php). Model używany jest również do walidacji danych formularzy zanim zostaną one zapisane w bazie, do zdefiniowania relacji z innymi modelami i można go jeszcze wykorzystać do innych celów, ale na początek przedstawię jedynie podstawowe informacje.

PISZEMY PIERWSZY MODEL

Załóżmy, że chcemy napisać model, który dałby nam możliwość reprezentacji danych użytkownika zawartych w bazie. Najprościej wyglądało by to tak:


<?php
class User extends AppModel {
 var $name = 'User';
}
?>

Ale to nie wszystko, musimy jeszcze pamiętać o dwóch sprawach:

1. Posiadamy w bazie danych tabelkę users.

2. Zaprezentowany wyżej kod umieszczamy w pliku user.php, który powinien znajdować się w folderze models.

Dopiero teraz mamy w pełni działający model. Musimy jednak pamiętać, że jeśli pominiemy któryś z kroków lub nie wykonamy go poprawnie to nie uzyskamy żądanego efektu. Jest tak, ponieważ Cake posługuje się przy tym pewnymi konwencjami, dzięki którym m. in. poruszanie się i wyszukiwanie odpowiednich bloków kodu, teraz jak i w przyszłości, stanie się dużo łatwiejsze. Zatem jesteśmy zmuszeni je znać, ale ja bym się tym za bardzo nie przejmował, to na prawdę jest proste i logiczne.

KONWENCJE ZWIĄZANE Z MODELEM

1. Nazwy modeli i ich klas pisane są w liczbie pojedynczej, w konwencji CamelCase (czyli łączenie wyrazów, pisanych z dużej litery, bez użycia spacji). Np.

User, UserProfile, UserType, UserStrangeThing itd.

2. Nazwy tabelek w bazie pisane są w liczbie mnogiej, z małych liter i kolejne wyrazy oddzielane są podkreśleniem. Np.

users, user_profiles, user_types, user_strange_things itd.

3. Nazwy plików z klasami modeli pisane są w liczbie pojedynczej, z małych liter, z rozszerzeniem .php i z wykorzystaniem podkreślenia między wyrazami. Np.

user.php, user_profile.php, user_type.php, user_trange_thing.php itd.

CIEKAWOSTKI

1. Tak naprawdę nie musimy definiować modelu w naszym projekcie jeżeli miałby on postać taką jak ta zaprezentowana przeze mnie. Dlaczego?
Jak pewnie zauważyłeś nic on nie wnosi, poza tym, że informuje o obecności tabelki w bazie. Przy braku zdefiniowanego modelu i tak mamy do niej dostęp właśnie dzięki zachowaniu konwencji.

Wyobraźmy sobie sytuację, że gdzieś w kodzie naszej aplikacji odwołujemy się do modelu User, aby np. pobrać dane użytkownika o id równym 1. Cake w tej sytuacji przeszukuje katalog naszej aplikacji ale nie znajduje w nim modelu odpowiadającego użytej nazwie, więc nie wie z jakiej tabelki pobrać dane. Jednak biorąc pod uwagę konwencje musi poszukać w bazie tabelki users. Jeśli znajdzie, zachowuje się tak jakby był zdefiniowany model dla tej tabelki, natomiast jeśli nie – zgłosi błąd o braku modelu.

2. Istnieje możliwość nieprzypisania modelu do tabelki. Mogłoby się wydawać, że działanie to nie ma sensu ale było by tak, gdyby model był używany jedynie do wykonywania operacji na bazie danych. Dzięki temu zabiegowi możemy na przykład przeprowadzić walidację formularza kontaktowego, przy którym nie ma potrzeby zapisywania do bazy żadnych informacji, a jedynie wysłanie maila z poprawnie sformatowanymi danymi.

Więcej informacji o modelu w kolejnych wpisach.