HTTP kérés
A Nette a HTTP-kérést érthető API-val rendelkező objektumokba kapszulázza, miközben szanálási szűrőt biztosít.
A HTTP-kérést a Nette\Http\Request objektum képviseli.
Ha a Nette-tel dolgozik, ezt az objektumot a keretrendszer automatikusan létrehozza, és függőségi injektálással átadhatja. A prezenterekben csak a
$this->getHttpRequest()
metódust kell meghívni. Ha a Nette keretrendszeren kívül dolgozik, akkor az objektumot
a RequestFactory segítségével hozhatja létre.
A Nette egyik fő előnye, hogy az objektum létrehozásakor automatikusan szanálja az összes bemeneti paramétert GET, POST, COOKIE, valamint az URL-t a vezérlő karakterektől és az érvénytelen UTF-8 szekvenciáktól. Ezután biztonságosan dolgozhat ezekkel az adatokkal. A fertőtlenített adatok a későbbiekben a prezenterekben és űrlapokban kerülnek felhasználásra.
Nette\Http\Request
Ez az objektum megváltoztathatatlan. Nincsenek setterei, csak egy úgynevezett wither withUrl()
, amely nem
változtatja meg az objektumot, hanem egy új példányt ad vissza a módosított értékkel.
withUrl(Nette\Http\UrlScript $url): Nette\Http\Request
Egy klónt ad vissza egy másik URL-címmel.
getUrl(): Nette\Http\UrlScript
Visszaadja a kérés URL-címét UrlScript objektumként.
Figyelmeztetés: A böngészők nem küldenek töredéket a kiszolgálónak, ezért a $url->getFragment()
egy
üres karakterláncot fog visszaadni.
getQuery(?string $key=null): string|array|null
Visszaadja a GET-kérelem paramétereit:
getPost(?string $key=null): string|array|null
POST kérés paramétereinek visszaadása:
getFile(string|string[] $key): Nette\Http\FileUpload|array|null
Visszaadja a feltöltést objektumként: Nette\Http\FileUpload:
Adja meg a kulcsok tömbjét a részfa struktúrájának eléréséhez.
Mivel a kívülről érkező adatokat nem bízhatja meg, és ezért nem támaszkodik a struktúra formájára, ez a módszer
biztonságosabb, mint a $request->getFiles()['my-form']['details']['avatar']
, amely hibásan működhet.
getFiles(): array
Visszaadja a feltöltési fájlok fáját egy normalizált struktúrában, amelynek minden egyes levele a Nette\Http\FileUpload egy példánya:
getCookie(string $key): string|array|null
Visszaad egy cookie-t vagy null
, ha nem létezik.
getCookies(): array
Visszaadja az összes sütit:
getMethod(): string
Visszaadja a HTTP-módszert, amellyel a kérés történt.
isMethod(string $method): bool
Ellenőrzi a HTTP-módszert, amellyel a kérés érkezett. A paraméter nem érzékeny a nagy- és kisbetűkre.
getHeader(string $header): ?string
Visszaad egy HTTP-fejlécet vagy a null
címet, ha az nem létezik. A paraméter nem érzékeny a nagy- és
kisbetűkre:
getHeaders(): array
Az összes HTTP-fejlécet asszociatív tömbként adja vissza:
isSecured(): bool
A kapcsolat titkosított (HTTPS)? Lehet, hogy a megfelelő működéshez proxy-t kell beállítania.
isSameSite(): bool
A kérés ugyanarról az (al)tartományról érkezik, és egy linkre kattintva indult? A Nette a _nss
cookie-t
(korábban nette-samesite
) használja ennek felismerésére.
isAjax(): bool
Ez egy AJAX-kérés?
getRemoteAddress(): ?string
Visszaadja a felhasználó IP-címét. A megfelelő működéshez szükség lehet egy proxy beállítás ára.
getRemoteHost(): ?string
Visszaadja a felhasználó IP-címének DNS-fordítását. A megfelelő működéshez szükség lehet egy proxy beállítás ára.
getBasicCredentials(): ?string
Visszaadja a Basic HTTP hitelesítési hitelesítő adatokat.
getRawBody(): ?string
Visszaadja a HTTP-kérelem testét:
detectLanguage(array $langs): ?string
Nyelv észlelése. A $lang
paramétereként átadjuk az alkalmazás által támogatott nyelvek tömbjét, és a
böngésző által preferált nyelvet adja vissza. Ez nem varázslat, a módszer csak a Accept-Language
fejlécet
használja. Ha nem talál egyezést, akkor a null
értéket adja vissza.
RequestFactory
A Nette\Http\RequestFactory osztály a
Nette\Http\Request
egy példányának létrehozására szolgál, amely az aktuális HTTP-kérést képviseli. (Ha a
Nette-tel dolgozik, a HTTP-kérelem objektumot a keretrendszer automatikusan létrehozza).
A fromGlobals()
módszer létrehoz egy kérési objektumot az aktuális PHP globális változók
($_GET
, $_POST
, $_COOKIE
, $_FILES
és $_SERVER
) alapján. Az
objektum létrehozásakor automatikusan megtisztítja a GET, POST, COOKIE, valamint az URL összes bemeneti paraméterét a
vezérlő karakterektől és az érvénytelen UTF-8 szekvenciáktól, ami biztosítja a biztonságot az adatokkal való későbbi
munka során.
A RequestFactory a fromGlobals()
meghívása előtt konfigurálható:
- a
$factory->setBinary()
metódus segítségével kikapcsolható a bemeneti paraméterek automatikus tisztítása a vezérlő karakterektől és az érvénytelen UTF-8 szekvenciáktól. - a
$factory->setProxy(...)
metódus segítségével megadhatja a proxy-kiszolgáló IP-címét, amely a felhasználó IP-címének helyes felismeréséhez szükséges.
A RequestFactory lehetővé teszi olyan szűrők definiálását, amelyek automatikusan átalakítják az URL-kérés egyes részeit. Ezek a szűrők eltávolítják a nem kívánt karaktereket az URL-ekből, amelyek például a különböző webhelyek kommentrendszerének helytelen megvalósítása miatt kerülhettek be:
Az első kulcs 'path'
vagy 'url'
határozza meg, hogy a szűrő az URL melyik részére kerüljön
alkalmazásra. A második kulcs a keresendő reguláris kifejezés, az érték pedig a talált szöveg helyett használandó
helyettesítő kifejezés.
Feltöltött fájlok
A Nette\Http\Request::getFiles()
módszer egy normalizált struktúrájú, feltöltött fájlokat tartalmazó fát
ad vissza, amelynek minden egyes levele a Nette\Http\FileUpload példánya. Ezek az objektumok
tartalmazzák a feltöltött fájlokat, amelyeket a <input type=file>
form elem által megadott adatokat.
A struktúra tükrözi a HTML elemeinek elnevezését. A legegyszerűbb példában ez lehet egy egyetlen elnevezett űrlapelem, amelyet a következőképpen küldtek be:
Ebben az esetben a $request->getFiles()
tömböt ad vissza:
A FileUpload
objektum akkor is létrejön, ha a felhasználó nem töltött fel semmilyen fájlt, vagy a
feltöltés sikertelen volt. A hasFile()
módszer true-t ad vissza, ha egy fájl elküldésre került:
Tömbös jelölést használó bemenet esetén a név:
A visszaadott fa végül így néz ki:
A fájlok tömbjeit is létrehozhatja:
Ebben az esetben a struktúra így néz ki:
A beágyazott tömb 1. indexének elérésének legjobb módja a következő:
Mivel kívülről nem bízhatunk az adatokban, és ezért nem támaszkodunk a struktúra formájára, ez a módszer
biztonságosabb, mint a $request->getFiles()['my-form']['details']['avatars'][1]
, amely meghibásodhat.
A FileUpload
módszerek áttekintése
hasFile(): bool
Visszaadja a true
értéket, ha a felhasználó feltöltött egy fájlt.
isOk(): bool
Visszaadja a true
értéket, ha a fájl feltöltése sikeres volt.
getError(): int
Visszaadja a feltöltött fájlhoz tartozó hibakódot. Ez az UPLOAD_ERR_XXX konstansok egyike. Ha a fájl feltöltése
sikeres volt, akkor a UPLOAD_ERR_OK
értéket adja vissza.
move(string $dest)
Egy feltöltött fájl áthelyezése egy új helyre. Ha a célfájl már létezik, a rendszer felülírja azt.
getContents(): ?string
Visszaadja a feltöltött fájl tartalmát. Ha a feltöltés nem volt sikeres, akkor a null
értéket adja
vissza.
getContentType(): ?string
A feltöltött fájl MIME-tartalomtípusát az aláírása alapján állapítja meg. Ha a feltöltés nem volt sikeres, vagy a
felismerés sikertelen, akkor a null
címet adja vissza.
PHP kiterjesztést igényel fileinfo
.
getUntrustedName(): string
Visszaadja a böngésző által megadott eredeti fájlnevet.
Ne bízzon az e módszer által visszaadott értékben. Egy ügyfél rosszindulatú fájlnevet küldhet azzal a szándékkal, hogy megrongálja vagy feltörje az alkalmazást.
getSanitizedName(): string
Visszaadja a szanált fájlnevet. Csak ASCII karaktereket tartalmaz. [a-zA-Z0-9.-]
. Ha a név nem tartalmaz ilyen
karaktereket, akkor az ‚unknown‘ értéket adja vissza. Ha a fájl JPEG, PNG, GIF vagy WebP kép, akkor a megfelelő
fájlkiterjesztést adja vissza.
PHP kiterjesztés szükséges fileinfo
.
getSuggestedExtension(): ?string
Visszaadja az észlelt MIME-típusnak megfelelő fájlkiterjesztést (pont nélkül).
PHP-bővítményt igényel fileinfo
.
getUntrustedFullPath(): string
Visszaadja a böngésző által a könyvtár feltöltése során megadott eredeti teljes elérési utat. A teljes elérési útvonal csak a PHP 8.1 és újabb verziókban érhető el. A korábbi verziókban ez a módszer a nem megbízható fájlnevet adja vissza.
Ne bízzon az e metódus által visszaadott értékben. Egy ügyfél rosszindulatú fájlnevet küldhet azzal a szándékkal, hogy megrongálja vagy feltörje az alkalmazást.
getSize(): int
Visszaadja a feltöltött fájl méretét. Ha a feltöltés nem volt sikeres, akkor 0
-t ad vissza.
getTemporaryFile(): string
Visszaadja a feltöltött fájl ideiglenes helyének elérési útvonalát. Ha a feltöltés nem volt sikeres, akkor a
''
értéket adja vissza.
isImage(): bool
Visszaadja a true
értéket, ha a feltöltött fájl JPEG, PNG, GIF vagy WebP kép. A felismerés az aláírás
alapján történik. A teljes fájl sértetlenségét nem ellenőrzi. Azt, hogy egy kép nem sérült-e, például a betöltési próbálkozással állapíthatja meg.
PHP bővítményt igényel: fileinfo
.
getImageSize(): ?array
Visszaad egy pár [width, height]
a feltöltött kép méreteivel. Ha a feltöltés nem volt sikeres, vagy nem
érvényes kép, akkor a null
visszatér.
toImage(): Nette\Utils\Image
Képet tölt be Image objektumként. Ha a feltöltés nem volt sikeres vagy nem
érvényes kép, akkor a Nette\Utils\ImageException
kivételt dob.