Formulář neodešle pokud nevyberu soubor
- argosovo
- Člen | 54
Ahoj,
určitě to bude jenom nějaká hloupost a někdo jste se s tím už setkal.
Mám komponentu, která vytváří formulář, nedávno jsem do ní přidal
možnost uploadovat s odesílaným formulářem soubor (dle oprávnění
uživatele). Pokud však soubor nevyberu, formulář nikdy neprovede akci
definovanou při odeslání – prostě se pouze reloaduje stránka. Jakmile
vyberu llibovolný soubor, provede se odeslání formuláře jako obvykle.
Formulář je poměrně složitý, právě vzhledem k závislostem na roli
uživatele, ale neodesílat začal až po přidání souboru.
Ve zkratce (pokud pomůže):
<?php
public function createComponentEditUserForm(){
$this->form = new \Nette\Application\UI\Form;
$this->form->addUpload("img", "Nahrát logo")
->addRule(Form::IMAGE, 'Obrázek musí být ve formátu JPEG, PNG nebo GIF.')
->addRule(Form::MAX_FILE_SIZE, 'Maximální velikost souboru je 4MB.', 4000 * 1024);
$this->form->addSubmit('submit', 'Změnit údaje');
$this->form->onSuccess[] = array($this, 'formSucceeded');
}
public function formSucceeded(UI\Form $form,$values) {
$this->presenter->flashMessage("test");
}
?>
Nějaký nápad proč by tomu tak mělo být? Děkuji,Martin
Editoval argosovo (8. 4. 2016 11:00)
- argosovo
- Člen | 54
funguje děkuji, nicméně když na to koukám možná že jsem tam něco
takového měl, ale říkal jsem si – no tady ten soubor nebude nutný, ale
uživatel bude mít na výběr zda ho nahraje nebo ne.
Můžu poprosit vysvětlení? Proč „Form:FILLED“ u souboru zajistí
odeslání při nevybraném souboru, zatímco bez této podmínky to nejde?
Přitom podmínka samotná mi evokuje spíše opačnou situaci.
- argosovo
- Člen | 54
Aha, už to asi mám – pokud se validační pravidla řetězí, tak je nejprve třeba zkontrolovat zda je vyplněn soubor, pokud je, přicházejí na řadu další pravidla. Pokud já jsem tam neměl tuto první kontrolu, tak formulář bez souboru nemohl projít, protože žádný soubor nebyl typu Image. :)
- Šaman
- Člen | 2666
Je to tím, že v původní verzi máš input a pravidlo, že tam musí být obrázek. Takže když nic nevybereš, není splněná podmínka.
Když tomu předřadíš to addCondition
, pak se celá
následující větev podmínek testuje jen je-li splněná podmínka. Tedy
je-li vybrán soubor, musí to být obrázek maximálně 4MB.
Je to popsané v dokumentaci.
Edit: Aha, tu už jsi to poměrně přesně posal o dva příspěvky výše.
Jen bych zdůraznil, že je potřeba předřadt podmínku
(addCondition
), nikoliv pravidlo (addRule
). Pokud bys
přiřadil pravidlo Form::FILLED
, samozřejmě by to ten soubor
vyžadovalo (i bez dalších pravidel).
Editoval Šaman (8. 4. 2016 11:46)