Piszemy kolejnego helpera do naszego projektu MVC. Tym razem będzie to klasa dla URLów. Do dzieła.
Rzecz pierwsza – metoda redirectTo:
class URL {
public static function redirectTo($path)
{
if(static::isURL($path)){
header("Location: {$path}");
http_response_code(302);
}
exit;
}
}
Potrzebna nam walidacja czy dany string jest URLem:
class URL {
public static function redirectTo($path)
{
if(static::isURL($path)){
header("Location: {$path}");
http_response_code(302);
}
exit;
}
public static function isURL($str){
return (bool) filter_var($str, FILTER_VALIDATE_URL);
}
}
Teraz funkcje zwracające URI, path i query:
class URL {
//(...)
public static function requestUri(){
return parse_url($_SERVER['REQUEST_URI']);
}
public static function requestPath(){
return parse_url($_SERVER['REQUEST_URI'], PHP_URL_PATH);
}
public static function requestQuery(){
return parse_url($_SERVER['REQUEST_URI'], PHP_URL_QUERY);
}
}
Na koniec metoda pozwalająca sprawdzić, czy żądany URL ma query, zaś jeśli przekazać jej argument – czy ma query i posiada tam taki klucz:
class URL {
//(...)
public static function hasQuery(){
if(!func_get_args())
return !empty(parse_url($_SERVER['REQUEST_URI'], PHP_URL_QUERY));
$key = func_get_arg(0);
$has_key = isset($_GET[$key]) && !empty($_GET[$key]);
return static::hasQuery() && $has_key;
}
}
I może jeszcze jedna, prosta metoda:
class URL {
//(...)
public static function build_query($array){
return http_build_query($array);
}
}