Procedura dobijanja sadrzaja preko HTTP protokola je
1. request header (koji salje klijent) - PHP $_SERVER promenljiva sve to lepo sumira
http://php.net/manual/en/reserved.variables.server.php
2. response header (koji salje server)
3. response body (koji salje server)
Razumevanje ovog procesa dovodi do resenja tvoje dileme. Znaci kad klijent posalje zahtev, na serverskoj strani taj zahtev se hvata (za obradu takvog zahteva kreiraj klasu recimo Request ili UrlHandler kako god zelis).
Zatim obradi zahtev logikom koja je karakteristicna za aplikaciju.
Za MVC pattern je karateristicno da u URL imas prvo ime kontrolera zatim ime metode, i na kraju parametre.
Front Controller ti sluzi da uhvatis request od klijenta i iz njega izvuces controler, metodu koju pozivas i parametre, to sve povezes sa zeljenim kontrolerom i pozoves dispatch.
U njagrubljem smislu to bi izgledalo ovako:
Code:
class Request{
private $controller = ''; // Ovde mozes i postaviti i defaultni kontroler.
private $method = ''; // Ista prica kao i za kontroler
private $params = '';
function __construct(){
// Recimo nesto ovako: www.example.com/blog/show/id/1
list($controller, $method, $params) = explode('/', $_SERVER['QUERY_STRING']);
$this->controller = $controller;
$this->method = $method;
$this->params = $params;
}
function getController(){
return $this->controller;
}
public function getMethod(){
return $this->method;
}
}
Posto to sve imas u Request objektu znaci da si spreman da ides dalje. Ovde je naravno potrebno mnogo vise paznje i sigurnosti.
Dalje nastavljas tako sto kreiras klasu controller kojoj prosledjujes request.
Code:
class Controller{
....
public function __construct(Request $request){
$this->request = $request;
}
public function dispatch(){
$controller = new $this->request->getController(); // Recimo nesto ovako bi kreiralo controller Blog
return $controller->$this->request->getMethod(); // Na ovaj nacin bi bila pozvana metoda show.
}
.....
}
Zatim kad se to lepo sve nalazi u kontroleru, unutar index.php instanciras front controller. Front controler to sve poveze i pozove dispatch.
Ovo je nesto najgrublje moguce.
Kao sto vec pretpostavljas imao bi i klasu Response, koja bi posatavila header i body i na taj nacin bi ispostovao u potpunosti protokol.
Response klasa bi bila zaduzena za view deo.
Nadam se da sam uspeo da priblizim :) Izvinjavam se ako sam negde gresio u sintaksi nisam bas obracao paznju na kod.
p.s. A ni na pravopis ocigledno :S
[Ovu poruku je menjao b0ris dana 25.09.2011. u 17:08 GMT+1]
---------------------------------------------------------------------
Just do it.