Jak na funkčnost validačních pravidel fileUpload (Form::MAX_FILE_SIZE, Form::MIME_TYPE, Form::IMAGE)?

Upozornění: Tohle vlákno je hodně staré a informace nemusí být platné pro současné Nette.
Tomáš Votruba
Moderator | 1114
+
0
-

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
+
0
-

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
+
0
-

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.