Kontrolery
- Kontrolery to pliki php umieszczone w punFramework/controllers/
- Każdy plik zawiera klasę PHP, która dziedziczy klasę punController
- Nazwa pliku musi być taka sama jak nazwa klasy + .php
- Szkieletowy kontroler to:
- Każdy moduł np. "newsy" powinny mieć własny kontroler
- Każdy kontroler powinien mieć oddzielne metody dla poszczególnych akcji/widoków (pokaż newsy, dodaj newsa, usuń newsa)
- Metody powinny zwracać (return) dane niż je wyświetlać
Mapowanie URLi
punFramework używa prostego mapowania:mvc.php?c=NAZWA_KONTROLERA
mvc.php?c=NAZWA_KONTROLERA&m=NAZWA_METODY
mvc.php?c=NAZWA_KONTROLERA&m=NAZWA_METODY&var1=foo1&va2=foo2
mvc.php?c=NAZWA_KONTROLERA&m=NAZWA_METODY
mvc.php?c=NAZWA_KONTROLERA&m=NAZWA_METODY&var1=foo1&va2=foo2
- NAZWA_KONTROLERA to nazwa kontrolera
- NAZWA_METODY to nazwa metody kontrolera, którą chcemy wywołać
- Nazwa kontrolera i metody może zawierać TYLKO znaki alfabetu
- duże i małe liter. !!!!!!!!!!
- Jeżeli nie podasz nazwy metody wtedy domyślnie zostanie wywołana metoda index()
Dostępne zmienne fluxBB
- $this->pun_user - tablica $pun_user z danymi o bierzącym użytkowniku
- $this->db - obiekt $db operujący na bazie danych
- $this->pun_config - tablica $pun_config zawierająca konfigurację forum
- $this->pun_url - tablica $pun_url zawierająca URLe do standardowych elementów forum
- $this->lang_common - tablica $lang_common zawierająca pospolite frazy-tłumaczenia
Widoki
Widoki to niejako szablony i powinny zawierać kod HTML odpowiedzialny za wygląd danego elementu.- Widoki zapisujemy jako pliki PHP w punFramework/views/
- By w kontrolerze załadować widok wystarczy: Gdzie NAZWA_WIDOKU to nazwa pliku widoku bez .php
- Drugi argument to tablica asocjacyjna z danymi jakie mają być przekazane do widoku
- W widoku tablica ta dostępna jest pod zmienną $data
- Powinieneś używać styli/klas CSS punBB :)
Modele
Modele są podobne do kontrolerów, dziedziczą punRoot a ich zadaniem jest przechowywanie logiki operującej na bazie danych - samych zapytań z niezbędnym kodem dodatkowym. Używanie Modeli (jak i widoków) jest opcjonalne lecz zaleca się ich stosowanie.- Szkielet modelu wygląda tak:
- Model zapisujemy jako punFramework/models/NAZWAKLASY.php
- Każda operacja na bazie danych typu "pokaż newsy" , "usuń newsy" powinna mieć własną metodę
- Możesz użyć $this->db
- standardowego obiektu punBB do operowania na bazie danych
- Możesz też używać NAZWAKLASY::query
- wrappera, który zwróci tablicę asocjacyjną z wynikami dla zapytań SELECT oraz wykona i zwróci True dla pozostałych
- Wrapper ::query wygeneruje wyjątek w przypadku błędu zapytania (patrz "obsługa błędów")
- By załadować model w kontrolerze wystarczy:
- $object w tym przykładzie to obiekt klasy kontrolera gotowy do wykorzystania.
Inne Pomocniki
- W kontrolerach możesz użyć:
NAZWA_KONTROLERA::render_template('tytuł', 'treść');
- Co zwróci dane wstawione w standardową komórkę punBB:
- Oprócz tego masz dostęp do:
- NAZWA_KONTROLERA::is_admin() # zwróci True jeżeli bieżący użytkownik to Admin (ID grupy - 1)
- NAZWA_KONTROLERA::is_user() # zwróci True jeżeli bieżący użytkownik jest zwykłym użytkownikiem (ID grupy - 3)
- NAZWA_KONTROLERA::check_login() # zwróci True jeżeli bieżący użytkownik jest zalogowany
Obsługa Błędów
- Gdy framework napotka na błąd wygeneruje wyjątek, który zostanie przechwycony przez niego.
- Pełen komunikat błędu zostanie zapisany do debug.php
- Skrypt wyświetli zwykły ekran punBB informujący że coś się nie udało
- By zobaczyć pełen komunikat błędu otwórz w edytorze tekstowym debug.php
- Do obsługi własnych błędów również używaj wyjątków a punFramework obsłuży je tak samo jak własne :) Wykonywanie kodu zostanie przerwane w miejscu wywołania wyjątku, punFramework przejdzie do zapisania komunikatu i wyświetlenia wiadomości użytkownikowi.
