Formulář – dvě odeslání – každý s jinou akcí a jinou zobrazenou stránkou

Webster.K
Člen | 192
+
0
-

Zdravím všechny, řeším drobnost. Potřebuji udělat formulář, který na konci místo tlačítka uložit bude mít tlačítko „uložit a vrátit se zpět“ nebo „uložit a pokračovat v editaci“.

Je mi jasné, že ve formuláři musím mít 2×, s pokaždé jiným názvem

$form->addSubmit('parametry')

, a pak na konci budu mít něco jako

$form->onSuccess[] = [$this, 'processForm'];

Tady začíná můj první problém. Jak dokážu zjistit, který submit to odeslal? Vím že druhý parametr je ono zpracování, ale netuším, jak poznat, přes co bylo odesláno. Druhá část se týká presenteru, kde vytvářím komponentu. Tam mám kód:

protected function createComponentNovaKnihaForm() {
        $form = $this->factoryNovaKniha->create();
        $form->onSuccess[] = function ($form) {
            $form->getPresenter()->redirect('Kniha:default');
        };
        return $form;
    }

Jak z toho dokáži přesměrovat někam jinam? Řešil bych to asi IFem, kde bude odeslaný tím konkrétním submitem, ale je to určitě nějak navázáno na předchozí část dotazu. Všem děkuji za případné rady :)

Jan Endel
Člen | 1016
+
0
-

Ahoj Webstere,

pravděpodobně to co hledáš je metoda isSubmittedBy() nad SubmitButton. Více v API.

Felix
Nette Core | 1186
+
+2
-

Tedka koukam, ze o tom neni zminka v docce (https://github.com/…/docs/search?…).

Dopisu to tam.

MajklNajt
Člen | 471
+
0
-

ja to používam takto:

$form->addSubmit("save", "admin.buttons.save_and_stay")->onClick[] = function ($submit) {
	$this->onClickSaveAndStay($submit->form);
};
$form->addSubmit("save_and_close", "admin.buttons.save_and_close")->onClick[] = function ($submit) {
	$this->onClickSaveAndClose($submit->form);
};
MajklNajt
Člen | 471
+
0
-

a ešte detail, o to presmerovanie by sa ti mal starať presenter, nie formulár, tak redirect zaves na udalosť komponenty pri vytváraní komponenty v presenteri

Webster.K
Člen | 192
+
0
-

Mě se o přesměrování stará ale presenter :) viz úvodní příspěvek, ten poslední blok kódu je v presenteru :) zkusim k isSubmittedBy() dohledat informace jak se používá :)

MajklNajt
Člen | 471
+
0
-

ak máš metódu createComponentNovaKnihaForm v presenteri, potom v nej stačí namiesto

$form->getPresenter()->redirect('Kniha:default');

volať iba

$this->redirect('Kniha:default');

ale vravím, to sú len kozmetické detaily :)

Webster.K
Člen | 192
+
0
-

aha :) dobré vědět :)