Problém s uploadem – nefunguje setRequired
- n.u.r.v.
- Člen | 485
Ahoj, narazil jsem na zvláštní problém s uploadem.
Ve formuláři mám pole pro upload a dva radiobuttony. Pole pro upload je povinné. Problém je, že když ve formuláři nevyberu soubor pro upload a odešlu form, tak se provede odeslání, ale ani se nezobrazí JS alert, že je soubor povinný, a ani nedojde ke zpracování formu – nevypíše se form->adderror();
Když dám prázdnou metodu pro zpracování formuláře a do ní dám jen form->adderror(), tak se také nic nevypíše. Když zruším v továrničce setRequired(), tak se alespoň vypíše ten form->adderror. Co s tím? Díky…
Továrnička:
public function createComponentImportForm() {
$charset = array(
"Windows-1250" => "WINDOWS-1250",
"utf8" => "UTF-8"
);
$form = new Form();
$form->addProtection();
$form->addUpload('importFile')
->setAttribute('class', 'form-required')
->setRequired('Musíte vybrat soubor, který se má importovat.')
->addRule(Form::MAX_FILE_SIZE, 'Maximální velikost souboru je 20KB.', $this->context->parameters['importMaxFileSize']);
$form->addRadioList('charset', NULL, $charset)
->setDefaultValue('Windows-1250')
->getSeparatorPrototype()->setName(NULL); //pro zobrazeni na jednom radku
$form->addSubmit('uploadImportFile', 'POKRAČOVAT')
->setAttribute('class', 'btn btn-snd btn-lg btn-block');
return $form;
}
Zobrazení v latte (zkrácený příklad):
{form importTeachersForm}
{if $form->hasErrors()}
<div n:foreach="$form->errors as $flash" class="alert alert-danger">
<button type="button" class="close" data-dismiss="alert">×</button>
{$flash}
</div>
{/if}
{input importFile}
{foreach $form[charset]->items as $key => $label}
{input charset:$key}{label charset:$key/}
{/foreach}
{input uploadImportFile}
{/form}
Zpracování:
public function processImportTeachersFile(Form $form) {
$values = $form->getValues();
if ($values['importFile']->isOK()) {
....
....
}else{
$form->addError("Soubor se nepodařilo nahrát - zkuste to prosím znovu.");
}
}
P.S.: U formuláře mám ještě kontrolu velikosti – ta funguje a JS Alert se vypíše…Když dám upload souboru, který splňuje podmínky, tak vše proběhne ok…
Editoval n.u.r.v. (18. 12. 2013 13:45)
- n.u.r.v.
- Člen | 485
llook napsal(a):
Zkus
$form->allErrors
místo$form->errors
. Je to takový zákeřný BC break v Nette 2.1, že stejně se jmenující metoda vrací něco jiného, než dřív…
Ahoj, díky za info…ale:
- spíš řeším problém, proč se vůbec form odesílá, když je pole povinné a já do něj nic nedám
- tu metodu vykreslení pro error používám všude a všude funguje…ale vyzkouším…
díky
Edit: $form->allErrors také nic… Zkoušeno v Opeře a v IE…
Editoval n.u.r.v. (18. 12. 2013 14:09)
- David Grudl
- Nette Core | 8228
llook napsal(a):
Zkus
$form->allErrors
místo$form->errors
. Je to takový zákeřný BC break v Nette 2.1, že stejně se jmenující metoda vrací něco jiného, než dřív…
Během testování 2.1 jsem zjistil, že tohle je fakt zákeřný problém, takže to revertnu a getErrors() bude opět vracet všechny chyby.