jak dynamicky nastavit „onSubmit“?
- wdolek
- Člen | 331
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)
- Nilp
- Člen | 65
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
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;
}