RkBlog

Hardware, programming and astronomy tutorials and reviews.

Budowa punFramework

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
  • 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
możesz użyć print_r($TABLICA); by zobaczyć zawartość i strukturę danej tablicy

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:
    <?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

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
    metody zwrócą False w przypadku nie spełnienia warunku.

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 :)
    <?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.
RkBlog

punFramework, 14 July 2008, Piotr Maliński

Comment article