jak dynamicky nastavit „onSubmit“?

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

mam formular pro vkladani i editaci zaroven – v tovarnicce vyrabim prazdny form, mam dve renderovaci metody – renderFooForm() a renderFooEditForm() … obe si z tovarnicky vyberou formular, v renderFooEditForm() se formular zaplni daty.
chci ale, aby se pri vkladani volala funkce „fooFormSubmitted“, pri editaci „fooEditFormSubmitted“.

zkousel sem v renderFoo*Form() udelat:

$form = $this->getComponent('fooForm');
$form->onSubmit[] = array($this, 'foo*FormSubmitted');

v domeni, ze pri odesilani formulare se vzdu zavola ta sama render metoda… ocividne vsak po odeslani formulare nedojde k nastaveni onSubmit v rendereru. kam tedy mohu nastaveni onSubmit podstrcit?

Editoval wdolek (31. 7. 2009 9:53)

Mas3r
Člen | 116
+
0
-

Mam taky 1 form pro vkladani i editaci – a taktez 1 metodu … A pak jestli je id==0, tak vkladas a kdyz ne, tak updatujes.

Nilp
Člen | 65
+
0
-

Muzes to proste nechat v jedne metode, coz by asi bylo nejjednodussi, nebo si vytvarej komponenty 2. Pokud pouzivas novou tovarnicku, tak si pridej nejakou dalsi metodu factoryFooForm($edit = FALSE), a volej ji z metod createComponentFooEditForm a createComponentFooAddForm. Pokud budes mit ty formulare na stejne strance, je nutne pouzit toto reseni.

Editoval Nilp (31. 7. 2009 17:25)

kravčo
Člen | 721
+
0
-

wdolek napsal(a):

zkousel sem v renderFoo*Form() udelat:

Neskoro… V render fáze by sa formulár už meniť nemal, keďže tieto zmeny skôr (pri spracovaní signálov) jednoducho nie sú vykonané.

v domeni, ze pri odesilani formulare se vzdu zavola ta sama render metoda… ocividne vsak po odeslani formulare nedojde k nastaveni onSubmit v rendereru. kam tedy mohu nastaveni onSubmit podstrcit?

nebolo by rozumnejšie spraviť 2 továrničky?

protected function createFooBaseForm()
{
    $form = new AppForm;
    // ...
    return $form;
}

protected function createComponentFooForm()
{
    $form = $this->createFooBaseForm(); // toto nie je továrnička
    $form->onSubmit[] = array($this, 'fooFormSubmitted')
    return $form;
}

protected function createComponentFooEditForm()
{
    $form = $this->createFooBaseForm(); // toto nie je továrnička
    $form->onSubmit[] = array($this, 'fooEditFormSubmitted')
    return $form;
}
wdolek
Člen | 331
+
0
-

kravco, nilp, mas3r :) diky za radu… nejak me takoveto trivialni reseni vubec netrklo X-( :)

PetrP
Člen | 587
+
0
-

Kravčovo řešení je nejlepší, ale jen chci ještě říct že onSubmit je proste jenom pole, takže není problém ho „resetovat“

$form->onSubmit = array();