Wzorce projektowe: Router – cz. 1
Informacje wstępne
Co to takiego ten Router i do czego on służy? Podobnie jak od strony technicznej jest to pewien „byt” zajmujący się odnajdywaniem/trasowaniem/przekazywaniem zadanych żądań.
W programowaniu Router to jeden z tzw Wzorców Projektowych, które powstały po to aby w miarę spójnie rozwiązywać problemy przy projektowaniu systemów.
O wzorcach projektowych powstało na pewno wiele mądrych i obszernych książek więc nie ma sensu abym ja się tutaj rozpisywał. Po co nam ten Router? Routerem nazwiemy obiekt, który będzie się zajmował pobieraniem adresu z przeglądarki i przetwarzaniem go na akcję zrozumiałą dla pozostałych elementów systemu. To on będzie decydował o tym, co ma się pojawić na wyjściu gdy pojawi się coś na wejściu.
Przykład:
Jeśli wpiszemy w przeglądarce:
http://moja.strona/witaj
Router odbierze na wejściu „witaj” i wg jemu znanego systemu przekaże dalej to żądanie – np „powie” systemowi, że należy wyświetlić stronę z powitaniem. Inny przykład:
http://moja.strona/
Router może mieć zaprogramowane domyślne akcje w przypadku braku konkretnych żądań. Przykładowo jeśli nie podano nic na wejściu to Router przekaże, że należy wyświetlić stronę główną.
Implementacji takiego systemu jest tak wiele jak i programistów jednakże pewne zasady ze względu na wzorce projektowe i wymagania techniczne są niezmienne i konieczne do poprawnego zrealizowania zadania.
Implementacja
W kolejnych krokach postaram się opracować prostą ale w pełni funkcjonalną implementację takiej klasy. Zacznijmy od opracowania podstawowych metod tej klasy
[php]
class Router {
public static $current_uri = ”;
public static function get_uri()
{
if (!empty($_SERVER[’PATH_INFO’]))
{
self::$current_uri = $_SERVER[’PATH_INFO’];
}
}
}
[/php]
Pole $current_uri będzie przechowywać pobrany adres na wejściu – zostanie on użyty później.
Metoda get_uri() powinna zostać uruchomiona na początku działania systemu. Jej zadaniem jest pobranie z pola tablicy superglobalnej $_SERVER wartości PATH_INFO. Pod tym polem kryje się wszystko to co zostało zapisane za plikiem, który uruchama skrypt – np index.php. Zatem jeśli w przeglądarce wpiszemy:
http://moja.strona/index.php/konto/rejestracja
To PATH_INFO będzie zawierało wartość
/konto/rejestracja
Zmienna $current_uri została domyślnie zainicjowana na wartość pustą. Jeśli jednak PATH_INFO było niepuste to przypiszmy tą wartość do $current_uri.
Przykładowe wywołanie kodu:
[php]
Router::get_uri();
echo Router::$current_uri;
[/php]
Tyle ma do roboty Router jeśli chodzi o odbieranie danych.
Podsumowanie
To jest oczywiscie bardzo prosta implementacja jednakże w pełni skuteczna i wystarczająca do dalszej „obróbki”. W kolejnej części postaram się pokazać podstawowe sposoby zabezpieczenia wejścia i rozbijanie wejścia na konkretne akcje.
Następna część: Router cz. 2