Nette Framework
  • Úvodní stránka
  • Download
  • Dokumentace
  • Fórum
  • Blog
  • Přispějte
  • Quick Start
    • Začínáme
    • Adresářová struktura
    • Vytvoření presenteru
    • Připojení šablony
    • Tvorba odkazů
    • Hezčí šablony
    • Zobrazení tabulky
    • Stránkování a řazení
    • Tvoříme komponentu
  • Nette\Annotations
  • Nette\Application
    • Application
    • AppForm
    • Control
    • Presenter
    • PresenterCompo­nent
    • PresenterRequest
    • Routování
    • MultiRouter
    • Route
    • SimpleRouter
  • Nette\Caching
  • Nette\Component
  • Nette\Debug
    • Základy
    • Logování chyb
    • Firebug
  • Nette\Environment
  • Nette\Forms
  • Nette\IO\SafeS­tream
  • Nette\Loaders
  • Nette\Object
  • Nette\Security
    • Bezpečnost aplikací
    • Identity
    • SimpleAuthenti­cator
    • Permission
    • Dynamická správa rolí a zdrojů
  • Nette\String
  • Nette\Templates
    • Template
    • Template Filters
    • Template Helpers
  • Nette\Web\Html
  • Nette\Web\HttpR­equest
  • Nette\Web\HttpR­esponse
  • Nette\Web\Session
  • Nette\Web\User
Naposledy změněno 18. 11. 2008 Edituj Historie Poslední změny

Nette\Web\HttpR­equest

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 pro getHeader('referer') vracející adresu jako objekt Nette\Web\Uri
  • getRemoteAddress();
  • 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é:

  • Nette\Web\HttpR­equest API reference
« Nette\Web\Html Nette\Web\HttpR­esponse »

Nette Framework powered | dibi powered | Texy! powered | Institut Školení PHP