Odeslání formuláře při ručním vykreslení
- Inferi
- Člen | 18
Ahoj, zkouším vykreslovat ručně formulář (a dokonce nejen zkouším, ale potřebuji to). Vše šlo v pohodě, až na jedné stránce nastal problém. Pokud formulář do stránky vložím přes {widget form}, nebo {control form}, vše je v pořádku. Ale při vložení stylem (neudávám layout tabulky):
{$control['changeOrderForm']->render('begin')}
{$control['changeOrderForm'][$data->automataID]->control}
{$control['changeOrderForm']['changeOrder']->control}
{$control['changeOrderForm']->render('end')}
se po odeslání nic nestane. Respektive v URL se objeví url?do…, ale nedojde k vyvolání obslužné metody pro zpracování dat (u volání jako továrničky jde vše ok, ale to nemůžu pro stránku použít). Kód formuláře a obsluhy je následující:
public function createComponentChangeOrderForm(){
$form = new AppForm;
try{
$this->items = new Automata();
$temp = $this->items->getData();
foreach($temp as $data){
$form->addText($data->automataID, '')
->addRule(Form::FILLED, 'Vyplňte pořadí automatu!')
->setValue($data->automataOrder);
}
$form->addSubmit('changeOrder', 'Upravit pořadí automatů');
$form->addProtection('Odešlete formulář znovu (bezpečnostní token pozbyl platnosti).');
$form->onSubmit[] = callback($this, 'changeExistingOrderFormSubmitted');
}
catch(Exception $e){
$this->flashMessage($e->getMessage());
}
return $form;
}
public function changeExistingOrderFormSubmitted($form)
{
$values = $form->values;
try{
$pages = new Automata();
$pages->editOrder($values);
$this->flashMessage("Pořadí automatů bylo úspěšně upraveno.");
}
catch(Exception $e){
$this->flashMessage($e->getMessage());
}
$this->redirect('default', $this->category->catAlias);
}
Nějaký nápad, čím to může být? (v jiných stránkách mi to bez problémů funguje i při manuálním vykreslení) a už jsem to i kopíroval z nich, ale nepomáhá to.
- Inferi
- Člen | 18
HTML je následující a jelikož action tam zadaná je, tak nechápu, co se děje:
<form action="/temp/www/admin/automat/default/hot-and-cold?do=changeOrderForm-submit" method="post" id="frm-changeOrderForm" onsubmit="return nette.validateForm(this)">
<table id="articles">
<tr>
<td class="order">
<input type="text" class="text" name="1" id="frmchangeOrderForm-1" value="0" />
</td>
</tr>
</table>
</form>
<input type="submit" class="button" name="changeOrder" id="frmchangeOrderForm-changeOrder" value="Upravit pořadí automatů" />
<div><input type="hidden" name="_token_" id="frmchangeOrderForm-_token_" value="2a3573f3fd0176fca62a91e074e1dcb3" /></div>
</form>
- Inferi
- Člen | 18
Omlouvám se, ten form je tam ukončen pouze jednou, jsem se upsal při kopírování. Je to regulérní. Proto nechápu, kde je problém. Jak říkám, jako továrnička se to pošle a provede se i callback. Ale při ručním renderu (ať už jak výše, pomocí maker, nebo předáním formuláře do template) se form odešle, ale nevyvolá se callback.
- arron
- Člen | 464
Tak to ja bych i vedel…nemas pravdepodobne zavedeny client-side validacni JS a ve strance nemas vykreslene chyby formulare. Takze form se normalne submitnul, ale proze tam nastala chyba (tj. nebylo neco vyplneneho), tak se neprovedla submit metoda (ktera se provadi az kdyz je submit validni) a vratilo se to s chybou, kterou jsi nemel ve strance vypsanou, cili to vypadalo, ze se nic nestalo:-)