Nefunkční Form::addProtection() po upgradu na Nette 3

Melebius
Člen | 15
+
+1
-

Pokouším se upgradovat starší projekt na Nette 3 a zastavil jsem se na chybě, která se, aspoň podle vyhledávání na internetu, zatím asi nikomu nestala… 🙂 Při pokusu o načtení stránky s formulářem, který obsahuje volání $form->addProtection(); se mi ukáže výjimka:

TypeError
Argument 3 passed to Nette\Forms\Container::addComponent() must be of the type string or null, int given, called in …/web-app/vendor/nette/forms/src/Forms/Form.php on line 242

Nevidím, jak bych to mohl ovlivnit ze svého kódu – do funkce Form::addProtection(), do níž spadá uvedený řádek 242, žádný argument nepředávám. Zkusil jsem volání addProtection() zakomentovat a stránka se načetla správně. Dále jsem zkusil odhlásit se z aplikace a znovu se přihlásit (jestli se s Nette 3 třeba nezměnil obsah cookie…), ale stále se ukazuje chyba.

Mohl by mě prosím někdo nasměrovat, co s tím?

Případně poradit, zda je stále doporučené addProtection() používat? Nacházím k tomu rozporuplné informace (např. https://forum.nette.org/…to-vynutenej#… nebo https://doc.nette.org/…y-protection#… vs. https://doc.nette.org/…in-presenter#…). Můj formulář je v presenteru a jedná se o „administrační část webu“, resp. je to interní aplikace pro práci s důležitými daty.

kudlav
Člen | 1
+
0
-

Narazil jsem na stejnou chybu. Problém nastal jen v jednom konrétním formuláři. Pomohlo dát příkaz hned na začátek za instanciaci formuláře:

$form = new Form();
$form->addProtection();

$form->addText(...
...

Když jsem měl addProtection až za vytářením komponent, došlo k chybě.

TypeError
Argument 3 passed to Nette\Forms\Container::addComponent() must be of the type string or null, int given, called in …/vendor/nette/forms/src/Forms/Form.php on line 223

David Grudl
Nette Core | 7824
+
0
-

Opraveno