Budowa punFramework
14 July 2008
Comments
Wszystkie twoje komponenty dostępne są poprzez plik mvc.php. Można zmienić nazwę tego pliku na dowolną zachowując rozszerzenie .php.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:
<?php class test extends punController { public function index() { return 'witaj świecie'; } }
- 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
<?php $wynik = NAZWA_KONTROLERA::load_view('NAZWA_WIDOKU', array()); $wynik = test::load_view('hello', array('user' => 'Jon Doe'));
- 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:
<?php class posts extends punRoot { public function get_all_posts() { return posts::query("SELECT * FROM posts"); } }
- 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:
<?php $object = NAZWA_KONTROLERA::load_model('NAZWA_MODELU'); $news = test::load_model('news'); $news->get_latest_news();
- $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:
<div class="pun-block"> <h2><span>TYTUŁ</span></h2> <div class="pun-content"> TREŚĆ </div> </div>
- 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.
<?php IF($foo != $bar) { throw new Exception('$bar jest różne od $foo'); }
RkBlog
Comment article