isSubmited()
- m938nek
- Člen | 7
Dobrý den. Mam problém s metodou isSubmitted. Je skript, na kterej se dostávam pomocí formuláře. Uvnitř je nette formulář, jehož isSubmitted() vrací true už při prvnim načtení. Jde se toho nějak zbavit? Jestli jsem to pochopil, tak tahle metoda jen ověřuje, jestli jsou v postu nějaká data, nikoliv jestli se názvy shodujou s poli formuláře. Co s tim? Děkuji za rady.
Editoval m938nek (1. 4. 2009 19:29)
- David Grudl
- Nette Core | 8218
Je potřeba formulář pojmenovat, třeba
$form = new Form('nejakejmeno');
- m938nek
- Člen | 7
Přesně takhle jsem tu instanci vytvořil
<?php
$pForm = new NForm('pageForm');
$pForm->addHidden('identifier');
$pForm->addTextArea('content', 'obsah: ')
->addRule(NForm::FILLED, 'nevyplněný obsah');
$pForm->addSubmit('send', 'odeslat');
if ($pForm->isSubmitted()) {
if ($pForm->isValid()) {
// processing
}
}
?>
a na skript se dostávam přes tlačítka akcí, konkrétně třeba tohle:
<form action=„/new_cms/admin/prezentace/admin_page“
enctype=„multipart/form-data“ method=„post“
class=„actionForm“>
<input type=„hidden“ name=„actionName“ value=„edit“>
<input type=„hidden“ name=„identifier“ value=„1“ />
<input type=„image“ src=„/new_cms/img/editicon.png“
title=„editovat“ />
</form>
a hned při spuštění mi nette formulář generuje error <ul>, což znamená, že to bere jako odeslaný
Editoval m938nek (1. 4. 2009 20:11)
- sorm
- Člen | 8
Ano, chová se mi to naprosto stejně. Pokud v POST existuje nějaký parametr (např. minulé stisklé tlačítko o formulář výše), isSubmitted() to vyhodnotí jako stisk nějakého (i když neznámého tlačítka) a prostě začne výpisem ul.
Řeším to tak, že testuju, zda je isSubmitted() a pro každé tlačítko prověřím, zda je to isSubmittedBy() a pokud pro žádné není, tak je to ten první vstup a pomocí cleanErrors() zlikviduju ty hlášky a tím i zobrazení toho ul.
Ale zdá se mi to opravdu brutální metoda, leč na funkčnější (mimo odmazání parametrů z POST) jsem nevymyslel. To odmazávání se nedá použít, pokud nějaký hidden je společný pro první vstup i pro budoucí plnění formuláře, takže jsem se uchýlil k těm velkým testům.
- greenghost
- Člen | 7
bohuzel musim pridat svoji zkusenost. mam na jedne strance dva formy. jeden v hlavicce, druhy v contentu. oba jsem vytvoril pres new Form('') s nazvy ‚a‘ a ‚b‘, ale po odeslani prvniho mi i druhy reaguje na isSubmited(). nevim jestli to je tim, ze oba maji jedno policko stejne pojmenovane nebo jestli trida overuje jestli byl odeslany jen „nejaky“ formular (priznavam – nekoukal jsem do kodu)… jedine reseni asi bude opravdu overeni nazvu odesilaciho cudliku, ale mozna by bylo vhodne to nejak overit primo na urovni tridy – treba hidden pole s nazvem formulare slouzici k overeni ktery form byl vlastne odeslan
- David Grudl
- Nette Core | 8218
Aha, tak to se omlouvám, ono to vyžadovalo přidat
addTracker()
. Je to fixnuté, pokud má formulář název, přidá
se tracker sám.