Jet\Http_Request

Tato třída slouží k práci s HTTP požadavkem. A co je nejdůležitější, tak se pomocí této třídy operuje s daty na vstupu (POST a GET).

Jet standardně dělá to, že superglobální proměnné $_POST, $_GET a $_REQUEST znepřístupní. Pokus o použití těchto polí skončí vyhozením výjimky (pokud konfigurací neurčíte jinak). Cílem je o něco vylepšit elementární bezpečnost aplikace a také unifikovat práci se vstupními tady. Tomu se budeme věnovat ještě samostatně, nejprve si ukažme co vše tato třída umí.

Metoda Význam
public static initialize(
?bool $hide_PHP_request_data = null
): void
Inicializace se standardně provádí ve skriptu ~/application/Init/HTTPRequest.php.

Metoda má parametr $hide_PHP_request_data, který určuje zda znepřístupní $_GET, $_POST a $_REQUEST, ale primárně k tomuto nastavení slouží metoda SysConf_Jet_Http::setHideRequest(). Doporučuji nechat tuto funkci zapnutou.
public static GET(
): Data_Array
Přístup ke GET vstupním datům. Viz samostatný popis pod touto tabulkou.
public static POST(
): Data_Array
Přístup ke POST vstupním datům. Viz samostatný popis pod touto tabulkou.
public static currentURI(
array $set_GET_params = [],
array $unset_GET_params = [],
?string $set_anchor = null
): string
Slouží v situaci, kdy chcete získat aktuální URL, ovšem stačí vám část bez domény.

Tedy pokud je aktuální URL požadavku:
https://some.domain/path/?param1=value1#anch

pak metoda vrátí:
/path/?param1=value1#anch.

A v neposlední řadě tato metoda umí ovlivnit GET parametry.
Například potřebujete aktuální adresu, ale zároveň ji chcete bez GET parametru param1: Http_Request::currentURI(unset_GET_params: ['param1']); Nebo pokud naopak chcete nějaký parametr doplnit: Http_Request::currentURI(set_GET_params: ['new_param'=>'value']);
public static currentURL(
array $set_GET_params = [],
array $unset_GET_params = [],
?string $set_anchor = null
): string
Metoda je zcela identická jako currentURI. Jediný rozdíl je v tom, že URL vrací celou - tedy včetně domény a schématu.
public static URL(
bool $include_query_string = true,
bool $force_SSL = false
): string
Vrátí aktuální kompletní URL. Pokud je parametr include_query_string = true, pak včetně všech GET parametrů.

Metoda zároveň umí vnutit aby vrácená URL byla s https i když je aktuální požadavek pouze http.
public static baseURL(
bool $force_SSL = false
): string
Vrátí aktuální základní URL. To znamená pouze schéma a doménu - bez cesty a GET parametrů. I tato metoda umí vnutit https i když je aktuální požadavek pouze http.
public static schema(
): string
Vrátí http, nebo https.
public static rawPostData(
): string
Vrátí POST data načtená přímo ze vstupu.
Určeno pro implementaci REST API serveru a podobně.
public static requestMethod(
): string
Vrátí GET, POST, PUT, DELETE, HEAD, CONNECT, OPTIONS, nebo PATCH.
public static isHttp(
): bool
Indikuje zda je požadavek přes prosté http.
public static isHttps(
): bool
Indikuje zda je požadavek přes https.
public static clientIP(
): string
Kombinuje několik možností jak zjistit IP adresu klienta a tuto hodnotu vrací.
public static clientUserAgent(
): string
Vrací user agent klienta.
public static headers(
): array
Vrací HTTP hlavičky požadavku v podobě asociovaného pole.
public static postMaxSizeExceeded(
): bool
Indikuje zda v požadavku došlo k překročení maximální povolené velikosti POST a nahrávaných souborů. Užitečné a důležité právě pro zpracování nahrávání souborů - umožňuje na tento problém upozornit uživatele.

Práce s POST a GET daty (s daty na vstupu)

Pozornému oku čtenáře neuniklo, že metody POST() a GET() vrací instance třídy Jet\Data_Array, která je samozřejmě popsána v jiné části dokumentace. Ale protože je téma práce se vstupy opravdu důležité, tak si praktické použití ukážeme i zde. A vezmeme to rovnou po praktických příkladech.

Existuje daný vstupní parametr? if(Http_Request::GET()->exists('my_param')) {
    
//Yes, it exists ...
}

if(
Http_Request::POST()->exists('my_param')) {
    
//Yes, it exists ...
}

Na vstupu má být celé číslo a pokud parametr na vstupu není, tak chci výchozí hodnotu: $GET Http_Request::GET();

$id $GET->getInt('id');
$value $GET->getInt('value'1234);

$value Http_Request::POST()->getInt('value'4321);

Na vstupu má být desetinné číslo a pokud parametr na vstupu není, tak chci výchozí hodnotu: $value Http_Request::POST()->getInt('value'3.14);
Chci od vstupu true / false Http_Request::GET()->getBool('yes_no');
Na vstupu je řetězec (!), ale pro jistotu jej chci raději ošetřit kvůli bezpečnosti (!): Http_Request::POST()->getString('my_string_param')
Na vstupu je řetězec, ale musí mít jednu z platných hodnot. Jakmile je vstup neznámý, chci výchozí hodnotu: $action Http_Request::GET()->getString(
    
key:'action',
    
default_value'main_action',
    
valid_values: ['main_action''action2''action3''action4'
);
Chci vstup v syrové podobě - bez jakýchkoliv zásahů (a vím proč to dělám :-) )

(Může jít například o data z editorů článků a popisů, kde se HTML přímo předpokládá a tak dále)

$raw_value Http_Request::POST()->getRaw('param');

Přístup ke vstupům v podobě polí

Na vstupu může samozřejmě být i vícerozměrné pole. Standardně se s takovým vstupem v PHP pracuje takto:

$value $_POST['some']['array']['value'];

(to je samozřejmě jen část práce se vstupem ...)

Jak totéž udělat přes Jet a mít rovnou ošetřené zjištění existence daných hodnot v poli, případnou výchozí hodnotu a přetypování, nebo zabezpečení řetězce? Je to jednoduché. Použije se úplně stejná sada metod, která je uvedena výše. Pouze se jinak zapíše klíč dat, která požadujete. Uvedený příklad bude tedy vypadat takto: $value Http_Request::POST()->getInt('/some/array/value');

Ve skutečnosti je to tak, že Http_Request::POST() i Http_Request::GET() vnitřně pracuje s třídou Jet\Data_Array, které je k této práci s polem určena.

Předchozí kapitola
Http
Další kapitola
Jet\Http_Headers