Front Controller jest wzorcem projektowym. Jest to pojedynczy punkt dostępu do naszej aplikacji webowej. Znaczy to tyle, że wszystkie requesty trafiają właśnie do Front Controllera, który po przeanalizowania żądania decyduje jakie czynności podjąć w dalszej kolejności. Zacznijmy od najprostszego przykładu, gdzie żądaniem będzie wartość zmiennej request przesłanej do skryptu skrypt.php metodą GET. Oto nasz skrypt:
// skrypt spełnia rolę front controllera
switch ($_GET['request']) {
case 'index':
echo 'index';
/* jakies czynnosci np. include'y*/
break;
case 'page':
echo 'page';
/* jakies czynnosci */
break;
case 'about':
echo 'about';
/*jakies czynnosci */
}
Jak widać w zależności od wartości zmiennej request, wykonywane są odpowiednie działania.
Teraz gdy mam nadzieje, że już wszystko jest zrozumiałe przejdźmy do bardziej ambitnego przykładu. Stworzymy sobie klasę Front Controllera i wykorzystamy możliwości jakie daje moduł Apache’a – mod rewrite. Osób które nigdy nie miały do czynienia z tym modułem odsyłam do Google.
Na początku tworzymy sobie plik .htaccess i umieszczamy w nim:
[code]RewriteEngine on
RewriteBase /podkatalog1
RewriteRule !\.(jpg|png|css|js|ico|gif)$ index.php[/code]
Prosze zauważyć, że dzięki tej regule nie musimy się martwić o żądania innych zasobów jak zdjęcia, czy style css. Każdy inny request będzie kierowany do skryptu index.php.
Przechodzimy do implementacji klasy Front Controllera w pliku index.php. I wygląda ona tak:
class FrontController {
private $request;
public function __construct ($path) {
$this->request = $_SERVER['REQUEST_URI'];
$this->request = str_replace($path,'',$this->request);
}
public function Decide () {
switch ($this->request) {
case 'index':
echo 'index';
/* reszta kodu */
break;
case 'page':
echo 'page';
/* reszta kodu */
break;
case 'about':
echo 'about';
/* reszta kodu */
}
}
}
$front = new FrontController ('/podkatalog1/') ;
$front->Decide();
W konstruktorze klasy przypisujemy właściwości request żądanie, które będzie obsługiwane w metodzie Decide(). Proste rozwiązanie a daje dużo możliwości. Odsyłam do zmiennych i funkcji dynamicznych w PHP.
UWAGA!!
Proszę zwrócić uwagę, że przykład ten będzie działać poprawnie pod warunkiem, że adres który będziemy wywoływać, będzie wyglądał następująco:
www.naszadomenka.com/podkatalog1/about
REQUEST_URI w tym przypadku to /podkatalog1/about. Żądaniem jest about.
Konstruktor FrontController’a w parametrze otrzymuje ten fragment REQUEST_URI, którego ma się pozbyć, by poprawnie odczytać żądanie. Przy zmianie struktury katalogów proszę też nie zapominać o zmianach w pliku .htaccess
Pliki: źródła


Brak odpowiedzi : “poznajemy front controller”
Trackbacks/Pingbacks