zpracování formuláře odeslaného Ajaxem
- mach2roman
- Člen | 22
Řesím následující problém. Mám stránku, kde je tabulka která má v každém rádku jeden formulář s odesílacím tlačítkem a celý řádek je snippetem. Formuláře se odesílají přes Ajax. Nyní nastává problém se zpracováním. Jelikož se data do forrmuláře plní v Action, a signály se zpracovávají až po Action sekci, vrací to data do snippetu neaktuální (data se modifikují až při zpracování signálu). Při „klasickém“ ajaxovém požadavku si můžu v Action metodu processSignal() zavolat zpracování signálu a vše funguje. Ale při odeslání formuláře to při zavolání metody processSignal() chce zavolat né signál zadaný u submitu formuláře ale signál ve formátu jménoFormuláře-submit, který vyhodí chybu že neexistuje. Existuje nějaký způsob jak zavolat v action handle který form zpracuje?
- mach2roman
- Člen | 22
Tak problém jsem vyřešil, ale řešení se mě moc nelíbí. Jelikož příjemcem signálu není prezenter, ale componenta formuláře, nedokážu (alespoň já) toto zpracovat v Action. Proto jsem přistoupil k znovu vytvoření formuláře v handlu). Výsledkem je zhruba tento výsledek:
V Action mám toto:
<?php
public function actionZadavaniKM($spolecnost_vstup, $chs_vstup, $rok = null)
{
if ($rok == NULL) {
$rok = FenixCalendar::getActualYear();
}
$this->template->spolecnost_nazev = OsobniAuta::getSpolecnostNaze($spolecnost_vstup, $rok);
$values = OsobniAuta::zadavaniKMdata($spolecnost_vstup, $chs_vstup, $rok);
$data = $this->zadavaniKMform($values);
$this->template->q4 = OsobniAuta::calculate_quartal(4);
$this->template->q3 = OsobniAuta::calculate_quartal(3);
$this->template->q2 = OsobniAuta::calculate_quartal(2);
$this->template->q1 = OsobniAuta::calculate_quartal(1);
foreach ($data as $form){
$this->addComponent($form['FORM'], $form['NAME']);
}
$this->template->data = $data;
$this->template->spolecnost_vstup = $spolecnost_vstup;
$this->template->chs_vstup = $chs_vstup;
$this->template->rok = $rok;
}
?>
V handlu mám:
<?php
public function handleZadavaniKM($button)
{
$formvalues = $button->getForm()->getValues();
$result = OsobniAuta::ulozZadaneKM($formvalues);
$values = OsobniAuta::zadavaniKMdata($this->template->spolecnost_vstup, $this->template->chs_vstup, $this->template->rok);
$data = $this->zadavaniKMform($values);
$signal = $this->getSignal();
foreach ($data as $form){
if ($form['NAME'] == $signal[0]) {
unset($this[$form['NAME']]);
$this->addComponent($form['FORM'], $form['NAME']);
}
}
$this->template->data = $data;
$this->invalidateControl($formvalues['SNIPNAME']);
}
?>
Nejde to udělat nějak kulantněji?