Odeslání formuláře při ručním vykreslení

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

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.

arron
Člen | 464
+
0
-

Co presne to vygeneruje za HTML?

Inferi
Člen | 18
+
0
-

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>
arron
Člen | 464
+
0
-

Mas v tom nejakou botu…je tam dvakrat tag </form>, proto se to asi neodesle v poradku, protoze ten form je ukoncenej jeste pred submitem.

Editoval arron (24. 10. 2010 23:35)

srigi
Nette Blogger | 558
+
0
-

Skus pouzit vlastne renderovanie formulara pomocou makier, zapis v sablone je prehladnejsi.

Inferi
Člen | 18
+
0
-

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.

Inferi
Člen | 18
+
0
-

Všem děkuji, už se to vyřešilo – nevím proč, ale když jsem smazal pravidlo

->addRule(Form::FILLED, 'Vyplňte pole...');

tak vše jede bez problémů.

arron
Člen | 464
+
0
-

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:-)

Inferi
Člen | 18
+
0
-

Super, díky… už to jede i s validací. Myslel sem, že když to chytám přes try a catch, tak není potřeba tam mít {control …form errors}