Nette\Web\HttpRequest
Třída zapouzdřující a zjednodušující obsluhu HTTP požadavku.
Použití
Nejdříve si získáme/vytvoříme instanci třídy:
$httpRequest = Environment::getHttpRequest();
// pokud nepoužíváte třídu společně s Nette
$httpRequest = new HttpRequest;
Metody
getMethod()zjistí jakou metodou se na stránky přistoupilo (GET,POST,HEAD,PUT, …);getQuery()vrací podčást nebo celý query-string, který je naparsován do asociativního pole;getPost([string $key])vrací podčást nebo celý obsah pole$_POST;getFiles()celý obsah pole uploadovaných souborů$_FILES,getFile(string $key)vrací jeho podčásti;getCookies()vrací celý obsah pole$_COOKIE,getCookie(string $key)vrací jeho podčásti;getHeaders()vrací všechny HTTP hlavičky poslány prohlížečem,getHeader(string $key)vrací jednotlivé hlavičky;getReferer()– alias progetHeader('referer')vracející adresu jako objektNette\Web\UrigetRemoteAddress();isSecured()zjistí jedná-li se o zabezpečenou https komunikaci;isAjax()zjistí jedná-li se o AJAXový požadavek.
Metoda getRemoteAddress() slouží k získání IP adresy
serveru nebo jejího DNS překladu.
echo $httpRequest->getRemoteAddress();
// 127.0.0.1
echo $httpRequest->getRemoteAddress(TRUE);
// localhost
A nakonec velmi užitečná metoda detectLanguage(), která
získá preferovaný jazyk prohlížeče podle priority kterou máte nastavenu,
případně, pokud jí předáte pole jazyků, které podporuje vaše aplikace,
vrátí z nich ten, který by viděl návštěvníkův prohlížeč
nejradši.
Nejsou to žádná kouzla, jen se využívá hlavičky
accept-language.
// prohlížeč odesílá hlavičku: cs,en-us;q=0.8,en;q=0.5,sl;q=0.3
// jazyky podporované aplikací
$langs = array('hu', 'pl', 'en');
echo $httpRequest->detectLanguage($langs); // en
Filtrování URI adres
Filtrování URI je funkčnost, pomocí které je možné např.:
// odstranit mezery z cesty
$httpRequest->addUriFilter('%20', '', PHP_URL_PATH);
// odstranit tečku, čárku nebo pravou závorku z konce URI
$httpRequest->addUriFilter('[.,)]$');
// vyčistit cestu od zdvojených lomítek (výchozí filtr)
$httpRequest->addUriFilter('/{2,}', '/', PHP_URL_PATH);
Pomocí filtrů lze URI vyčistit od znaků, které se do nich mohou dostat kvůli špatně implementovaných komentařů na webech.
Nette\Web\Uri
Třída Uri je obecným zapouždřením jakéhokoliv URL (tedy
zatím jen URL) a poskytuje nám jednoduchou a elegantní práci s URI adresami podle doporučení pro označování
syntaxe adres RFC 3986. Základem třídy je funkce parse_url().
Použití je velmi intuitivní:
$uri = new Uri('http://nettephp.com/cs/dokumentace?action=history#footer');
// vstupem musí být absolutní adresa
echo $uri->absoluteUri;
// altenativně: echo (string) $uri;
// output: http://nettephp.com/cs/dokumentace?action=history#footer
echo $uri->scheme; // http
echo $uri->authority; // nettephp.com
echo $uri->getHostUri(); // http://nettephp.com
echo $uri->path; // /cs/dokumentace
echo $uri->query; // action=history
echo $uri->fragment; // footer
Jsou podporovány i jiná schémata než http, např.
file, ftp nebo https.
Propojení třídy Uri s třídou HttpRequest
Nette\Web\HttpRequest obsahuje dva (vlastně tři) URI
objekty:
HttpRequest::getUri()– k kanonické podobně;HttpRequest::getOriginalUri()– v surové podobě;- a ještě
HttpRequest::getReferer().
Kompletní cestu vrací metoda Uri::getAbsoluteUri(), takže lze
použít:
$httpRequest->getAbsoluteUri()->baseUri;
// nebo v prostředí Nette
Environment::getHttpRequest()->uri->absoluteUri;
// apod:
$httpRequest->getUri()->basePath;
$httpRequest->getUri()->relativeUri;
$httpRequest->getUri()->absoluteUri;
Viz také:
