Zastavení callbacků onSuccess po zavolání $form->addError()

joe
Člen | 313
+
0
-

Ahoj,

mám komponentu s formulářem, který má nastavený onSuccess, takto

$form = $this->formFactory->create();
$form->add...
$form->onSuccess[] = [$this, 'success'];

public function success(Form $form, $values) {
    echo "success 1";
}

Po odeslání se vypíše „success 1“, pokud ale přidám více callbacků a v tom prvním zavolám $form->addError(...), tak už se druhý callback neprovede, ale čekal bych že se zavolají všechny callbacky. Je to záměr?

$form = $this->formFactory->create();
$form->add...
$form->onSuccess[] = [$this, 'success'];
$form->onSuccess[] = [$this, 'success2'];

public function success(Form $form, $values) {
    echo "success 1";
    $form->addError("Chyba");
}

public function success2(Form $form, $values) {
    echo "success 2";
}

(Je to zjednodušený příklad, v praktickém použití mám „přihlašovací formulář“ (jedna komponenta), kterou obaluje druhá komponenta „přihlašování“, ze které jsem právě chtěl nastavit další onSuccess formuláři.)


Možná mi to už dává smysl, jen jsem bral onSuccess jako úspěšné odeslání formuláře a tím, že přidám chybu, jsem nečekal, že se z něj stane neúspěšně odeslaný.

Editoval joe (5. 11. 2017 21:06)

David Matějka
Moderator | 6445
+
+2
-

jj, je to zamer. deje se tak od verze 2.3 https://github.com/…765d41428eb0

joe
Člen | 313
+
0
-

Díky, ale popravdě mě to trochu mate. Mám dvě (může být i více) komponent, jedna z nich je na formulář, kde je definován onSuccess. A v další obalovací komponentně jsem chtěl další onSuccess formuláři nastavit, ale neprovedl se mi, i když se formulář „úspěšně“ odeslal. Takže nejspíš je řešení použít onSubmit :-)

David Matějka
Moderator | 6445
+
0
-

a co v tom druhem onSuccess delas? formular jiz neni validni, takze by to preci mohlo zpusobit problemy, ze pocitas s tim, ze validni je..

joe
Člen | 313
+
0
-

Napíšu jak to přesně mám.

Komponentu Form vytvářím v komponentě SignInForm, kde nastavuji onSuccess formuláři a provádím přihlášení. Při chybě se volá $form->addError(...).
V komponentě SignIn vytvářím instanci SignInForm a chtěl jsem nastavit událost onSuccess formuláři, že v případě AJAXu se překreslí komponenta. A pak už jsem jenom hledal, proč se mi nepřekresluje :-)