Wszystkie twoje komponenty dostępne są poprzez plik
mvc.php. Można zmienić nazwę tego pliku na dowolną zachowując rozszerzenie .php.
- 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ć
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
- 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()
- $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
możesz użyć
print_r($TABLICA); by zobaczyć zawartość i strukturę danej tablicy
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:
<?php
$wynik = NAZWA_KONTROLERA::load_view('NAZWA_WIDOKU', array());
$wynik = test::load_view('hello', array('user' => 'Jon Doe'));
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 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.
- 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 :)
<?php
IF($foo != $bar)
{
throw new Exception('$bar jest różne od $foo');
}
Wykonywanie kodu zostanie przerwane w miejscu wywołania wyjątku, punFramework przejdzie do zapisania komunikatu i wyświetlenia wiadomości użytkownikowi.
- Dodane: 14.07.2008 przez riklaunim