Místo vykonání callbacků formuláře dostanu 303

Bulldog
Člen | 87
+
0
-

Ahoj, jsem docela v pasti.
Tvořil jsem aplikaci a když přišlo na první formulář, tak začal docela problém. Místo vykonávání callbacků formuláře mě totiž Nette po odeslání formuláře rovnou přesměruje na stejnou stránku s 303 kódem.
Tak jsem si osekal aplikaci na totální minimum, kdy mám vlastně jen presenter a v něm toto:

public function createComponentMyForm(): Nette\Application\UI\Form
{
    $form = new Nette\Application\UI\Form();

    $form->addEmail('email', 'mail');

    $form->onValidate[] = function () {
        bdump('ve validate');
    };

    $form->onSuccess[] = function () {
        bdump('v success');
    };

    $form->addSubmit('submit', 'submit');

    return $form;
}

Šablona:

{block content}
    {control myForm}

A to je všechno.
I tak, ale když kliknu na tlačítko odeslat, tak místo vykonání onSuccess, nebo onValidate mě Nette automaticky přesměruje na stejnou stránku s HTTP kódem 303.

Co dělám špatně?

PHP 8.1, Nette nainstalováno jako čistá instalace přes composer create-project nette/web-project nette-blog, takže závislosti jsou stejné jako v čisté instalaci a konkrétní verze Nette/Forms je 3.1.7

EDIT
ještě doplním, co Nette posílá v post datech po odeslání prázdného formuláře na server:

[
    'email' => '',
    '_submit' => 'submit',
    '_do' => 'myForm-submit',
]

a ano opravdu se to posílá POSTem.

A BTW neprovede se ani validace prvků, takže když zadám neplatný mail, tak se to stejně přesměruje, takže přesměrování se vykoná ještě dřív, než se začne validovat, ale formulář se vytvoří.

EDIT 2
už aspoň vím, kde je chyba. Nette mi nenastavuje cookie _nss bohužel nemám tušení proč…

Editoval Bulldog (11. 9. 12:30)

netteman
Člen | 119
+
0
-

Pokud bude v presenteru
public function createComponentMyForm()

v šabloně potřebuješ
{control myForm}

Bulldog
Člen | 87
+
0
-

@netteman
Díky za upozornění na chybu v otázce. Už opraveno. V kódu to mám samozřejmě jednotně. Kdyby ne dostal bych error 500 a formulář by se ani nevykreslil.
Můj problém je, že se nenastavuje cookie _nss a tedy se formulář v klidu vykreslí, ale po odeslání to Nette vyhodnotí jako CSRF a tedy místo vykonání formuláře se provede redirect 303

Bulldog
Člen | 87
+
0
-

Ještě je asi nutné doplnit, že jsem zkusil do formuláře přidat $form->allowCrossOrigin(); a stejně to neprojde a dojde k přesměrování s http kódem 303, což nechápu proč, jelikož to pořád neprojde přes to, že není nastaveno _nss.

U jiných aplikací ale vše funguje normálně.. :D

Editoval Bulldog (11. 9. 12:50)