Jak na funkčnost validačních pravidel fileUpload (Form::MAX_FILE_SIZE, Form::MIME_TYPE, Form::IMAGE)?
- Tomáš Votruba
- Moderator | 1114
Zdravím,
potřebuji ověřovat velikost a typ souboru. Doufal jsem,
že postačí využít běžných validačních pravidel
fileUpload
(kde se na nic neodkazuje), ale ani omylem (updatnul
jsem si kvůli tomu Nette, ale nic). Napadá mne, zda vůbec jde o aktuální
dokumentaci.
<?php
// nette 2.0-betta
$test = new Form;
$test->addText("text")
->addRule(Form::FILLED,"Povinné");
// funkční
$test->addUpload("subor","Súbor:")
->addRule(Form::IMAGE,"Musí být JPG")
->addRule(Form::MIME_TYPE,"Možete použít pouze obrázok ve formátu JPG.","image/jpeg")
->addRule(Form::MAX_FILE_SIZE,"Obrázok je príliš velký, maximální povolená velikost je do 500 KB.",500);
// ani jedno pravidlo nezareagovalo
$test->addSubmit("posli");
echo $test;
?>
Řešilo se to zřejmě již tu, ale bez řešení, proto bych se také k nějakému rád dopracoval, aby následovníci jen našli a měli.
Díky.
- Filip Procházka
- Moderator | 4668
Budu předpokládat, že javascript nemyslíš, protože víš, že něco takového javascriptem ověřit nejde.
Nikdy v kódu nevidím
$form->onSuccess[] = function () { echo "všechno OK"; }
Jak se to chování? Ani chyby to nevypíše?
- vivaldi
- Člen | 2
Chce to zkontrolovat nastavení maximální velikosti POST požadavku v PHP
(post_max_size
v php.ini). Pokud požadavek přešvihne tuto
velikost, PHP ho celý zahodí – viz error log serveru, kde by o tom PHP
mělo informovat. Tím pádem neproběhne správně zpracování formuláře
v Nette, neboť s tím Nette nepočítá. Tento limit bohužel nelze nastavit
na nekonečno, takže jediné skutečné řešení by bylo testování
správného zpracování POST požadavky přímo v Nette (PHP manuál nabízí
jakési řešení). Částečně se to dá vyřešit nastavením
post_max_size
na nějakou velkou hodnotu, nemělo by to ale
přesáhnout memory_limit
.