Część 3. Budujemy własny framework MVC w PHP. Kontroler i model.

W poprzednich artykułach analizowaliśmy jak przebiega inicjalizacja i praca głównego kontrolera skryptu i w końcu przyszła pora na kontroler i modele.

Zakładamy, że użytkownik wszedł z URL http://domena.pl/pracownicy/telefony a FrontController zainicjował kontroler „pracownicy” i przekazał nam kontrolę na skryptem. Wygląda na to, że użytkownik próbuje zobaczyć listę telefonów należących do pracowników jakiejś firmy. Zobaczmy zatem co z tym zrobi kontroler:


<?php

defined('APP_PATH') or die();

class Controllers_Pracownicy implements Application_Interface_MVCAction
{

	// sprawdz czy akcja "telefony istnieje"
	public function __construct(Application_Router_Standard_HttpRequest $request, $action_dispatch)
	{
		$controllerActionName 	= $request->getParam('action').'Action';

		// jesli akcja istnieje wywaolaj ta akcje
		if(method_exists('Controllers_Pracownicy',$controllerActionName))
		{
			$this->$controllerActionName($request);
		}
		// jesli akcja nie istnieje
		else
		{
			// wywolaj domyslna akcje:
			//$this->indexAction($request);
			// ... lub ...
			// wywolaj domyslna obsluge bledow:
			//self::defaultError();
		}
	}

	public function indexAction(Application_Router_Standard_HttpRequest $request)
	{
		echo ' akcja index ';
	}

	public function telefonyAction(Application_Router_Standard_HttpRequest $request)
	{
		// pobierz telefony z modelu
		$lista_telefonow = Models_Pracownik::GetAll( )

		// pokaz telefony pracownikow
		$this->template = new Application_TemplateEngine();
		$this->template->set('tpl_template', 'pracownicy');
		$this->template->set('tpl_skin', '1');
		$this->template->set('tpl_body', $lista_telefonow );
		$this->template->set_doctype('xhtml1_transitional');
		$this->template->display( $this->template->render( 'pracownicy/lista.phtml' ) );
	}

	public function defaultError()
	{
		echo ' standardowa obsluga bledow ';
		die();
	}

}

?>

Zmienna $action_dispatch przekazana do kontrolera z FrontControllera ma jedynie charakter informacyjny, może przydać się na przykład w sytuacji gdy chcemy wiedzieć skąd i po jakim dokładnie zdarzeniu przychodzi użytkownik na aktualną stronę i podjąć na tej podstawie odpowiednią akcję.

Zauważ również, że kontroler implementuje interfejs Application_Interface_MVCAction, który wygląda następująco:


<?php

defined('APP_PATH') or die();

interface Application_Interface_MVCAction
{
   public function indexAction(Application_Router_Standard_HttpRequest $request);
   public function defaultError();
}

?>

Dzięki temu mamy pewność, że każdy nowy kontroler, tworzony nierzadko przez różnych programistów, będzie miał identyczną strukturę. W strukturze powyższego kontrolera należy również zwrócić uwagę na fakt, że prawie każdy framework MVC, z którym dotychczas się spotkałem, zarządza wywołaniem odpowiedniej akcji już we front kontrolerze. Ma to swoje wady i zalety. Z mojego punktu widzenia wygodniej jest podejmować decyzję o wyborze konkretnej akcji czy też obsługi błednych akcji już w konstruktorze samego kontrolera. Oczywistą wada tego rozwiązania jest konieczność powtarzania tego samego kodu w konstruktorach podczas gdy mógłby on znajdować się w głównym kontrolerze, natomiast zaletą olbrzymia skalowalność.

[ad#post]Po raz pierwszy w skrypcie znalazła się linijka kodu odpowiedzialna za dostarczenie danych z modelu. Naszym modelem są tu pracownicy a żądaną akcją wyciągniecie ich telefonów. Wynik zwracany jest w postaci tablicy i kierowany bezpośrednio do systemu szablonów i tam listowana za pomocą foreach().
Zastosowany system szablonów wykorzystuje wyłącznie PHP i jego zasada jego działania będzie omówiona w osobnym artykule.

W kilku następnych artykułach oprócz szablonów będziemy analizować prosty system cachowania wyników na różnych warstwach aplikacji, począwszy od cachowania MySQL, cachowania pojedyńczych modeli, cachowania widoków składających się na cały szablon aż po cachowanie całych stron www. Postaram się również przedstawić działania domyślnego kontrolera CMS, jego wbudowaną obsługę błędów 404 i 301 oraz towarzyszący mu kontroler do zarządzania systemem CMS.

źródło:

Powiązane wpisy:

Powiązane słowa kluczowe:

  • mvc php przykład
  • model mvc
  • php model
  • mvc php example

2 Responses to Część 3. Budujemy własny framework MVC w PHP. Kontroler i model.

  1. Pytajnik says:

    Mam pytania do autora, proszę wybaczyć że o takie proste rzeczy:
    1) Jaką nazwę ma mieć plik w którym będzie klasa Controllers_Pracownicy?
    2) W jakim pliku (jak nazwa, który katalog) ma być interfejs dla w/w klasy?

  2. Marcin Białasek says:

    Bardzo fajny i przystępny tutorial, kiedy będą kolejne części?

Odpowiedz na „Marcin BiałasekAnuluj pisanie odpowiedzi

Twój adres e-mail nie zostanie opublikowany. Pola, których wypełnienie jest wymagane, są oznaczone symbolem *

Możesz użyć następujących tagów oraz atrybutów HTML-a: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>