Ruční formulář se neodešle, automatický control ano
- ludek
- Člen | 83
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
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
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)