isSubmited()

Upozornění: Tohle vlákno je hodně staré a informace nemusí být platné pro současné Nette.
m938nek
Člen | 7
+
0
-

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

Je potřeba formulář pojmenovat, třeba $form = new Form('nejakejmeno');

m938nek
Člen | 7
+
0
-

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

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

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

PetrP
Člen | 587
+
0
-

Ono ani neni prijemne ze pri odeslani formu A se vyplni i text v B ;/

$form = new Form('a');
$form->addText('text');
$form->render();
$form = new Form('b');
$form->addText('text');
$form->render();

Ale proti tomu že jsou oba isSubmited je to jen maličkost ;]

David Grudl
Nette Core | 8228
+
0
-

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.