Ruční formulář se neodešle, automatický control ano

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

Zdravím,

Mám formulář, který když vykreslím pomocí {control myForm} normálně funguje, ale při ručním vykreslení ne. Formulář je poměrně velký a komplikovaný, je vyplněný správně, validace projde.

V presenteru je:

$this['myForm']->setDefaults($this->formValues);
  // naplní správně všechny hodnoty, stačí kliknout na submit a musí projít
  // jde o kontrolu už jednou vyplněných údajů, které uživatel zadal v předchozím kroku

Na jiném místě na stejné stránce potřebuji jen jeho odesílací tlačítko. Vypadá to takto:

<form n:name=myForm>
    <button n:name=send type="submit" class="btn btn-danger">
         ODESLAT KE ZPRACOVÁNÍ
     </button>
</form>

A to neudělá nic. Při odeslání zopakuje stránku s prázdným formulářem. Pokud v presenteru vyměním onSuccess[] za onSubmit[], abych obešel validaci, zahlásí obslužná metoda Missing argument 2, což jsou $values. Nedostane žádné hodnoty, nedají se získat ani s $values = $form->getValues().

Pokud bezprostředně pod výše uvedený kód do šablony napíšu {control myForm} a kliknu na jeho odeslání, všechno se provede správně, žádné validační chyby, dojde k zápisu do DB i k přesměrování.

Můžete mě prosím nasměrovat? Díky.

David Matějka
Moderator | 6445
+
0
-

Na jiném místě na stejné stránce potřebuji jen jeho odesílací tlačítko

to nejde, tlacitko musi byt soucasti <form> tagu spolu s ostatnimi inputy.

ludek
Člen | 83
+
0
-

Díky. Škoda. Nakonec jsem po prvním odeslání formuláře uložil data do session a po kontrole uživatelem zapsal pomocí handleru. Nic lepšího mě nenapadlo.

presenter:

private $formValues;

public function renderDefault() {
    $this->template->values = $this->formValues;
}

/** obsluha formuláře */
public function myFormSucceeded(UI\Form $form, $values) {
    $session = $this->getSession('data');
    $session->setExpiration(0);
    $session->values = $values;
    $this->formValues = $values;
}

/** Uložit data po kontrole */
public function handleSave() {

    $session = $this->getSession('data');
    if (isset($session->values)) {
        $values = $session->values;
            // ...uložit do tabulky
        unset($session->values);
        $this->redirect('this');
    } else {
        $this->flashMessage('<strong>CHYBA:</strong> data z formuláře se nepodařilo získat.', 'danger');
        $this->redirect('this');
    }
}

šablona:

{ifset $values}

    {* $values: výpis dat zadaných v prvním kroku *}
    <a n:href="save!" role="button" class="btn btn-danger">
        <strong>ODESLAT KE ZPRACOVÁNÍ</strong>
    </a>
    <p>Ještě upravit:</p>

{/ifset}

{control myForm}

Editoval ludek (8. 10. 2015 13:33)