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);
    }


}