použití addCondition u addUpload
- onny
- Člen | 67
Dobrý den,
snažím se docílit toho, aby nahrávaný soubor nebyl povinný, ale pokud je,
tak aby respektoval nějaká pravidla.
Což bych zapsal jako
$form->addUpload('image', 'Logo:')
->addCondition(NForm::FILLED)
->addRule(NForm::IMAGE, 'Logo musí být JPEG, PNG nebo GIF.')
->addRule(NForm::MAX_FILE_SIZE, 'Maximální velikost souboru je 2 MB.', 2048 * 1024 /* bytes */);
ale to není funkční – formulář s ještě vygeneruje, ale po odeslání jenom bílá stránka. Používám Nette 2 RC 1 5.2 s prefixy.
Děkuji
- semi
- Člen | 4
Zdravím,
nejsem žádný nette guru, tak neručím za 100% správnost. Používám verzi
NetteFramework-2.0.3-PHP5.3 Myslím že konkrétně to, co potřebujete funguje
i bez přidání oné Condition na vyplnění. Teoreticky stačí nechat tam
jen pravidlo na maximální velikost a pak ve zpracování formuláře chytat
vyjmky asi takto.
protected function createComponentUploadForm(){
$form = new UI\Form();
$form->addUpload('file', 'Soubor')
->addRule(UI\Form::MAX_FILE_SIZE, 'Maximální velikost souboru je 20 MB.', 20 * 1024 * 1024 /* v bytech */);;
$form->addSubmit('send', 'Nahraj');
$form->onSuccess[] = callback($this, 'uploadFormSubmitted');
return $form;
}
public function uploadFormSubmitted($form) {
try {
dump($form->getValues());
}catch(NS\AuthenticationException $e) {
$form->addError($e->getMessage());
}
}
Funguje to asi tak, že po vybrání velkého souboru a kliknutí „Nahraj“ se soubor začne nahrávat a v momentě když server zjistí, že soubor je větší než limit, utne to a hodí vyjmku a formulář promítne chybovou hlášku.