ArgumentCountError ve Form::getUntrustedValues()

m.brecher
Generous Backer | 714
+
0
-

Ahoj,

narazil jsem na ladění na takovýto problém:

Potřebuji si vytrasovat jak to vypadá s hodnotou null sloupce databázové tabulky a tak čistě z testovacích důvodů se potřebuji podívat jaká data jsou po inicializaci $form->setDefaults($data) ve formuláři – konkrétně co se stane s hodnotou null (ještě před submitem formuláře)

Metoda Form::getValues() nevrací reálná data, ale pouze validní, tu použít nelze. Na internetu jsem zahlédl nějaké poznámky od @DavidGrudl, že implementuje na podněty od uživatelů Nette metodu Form::getUntrustedValues(), která by dodala všechny data tak jak jsou, byť to není bezpečné.

Zkusil jsem hledat něco o této metodě v dokumentaci, ale nic nenašel. Zkusil jsem tedy $form->getUntrustedValues(), a obdržel chybovou hlášku:

ArgumentCountError

Too few arguments to function Nette\Forms\Container::getUntrustedValues(), 0 passed in
C:\www\cli\project\app\Admin\Presenters\TranslationPresenter.php on line 44 and at least 1 expected

Z chybové hlášky usuzuji, že metoda Form::getValues() existuje, ale má nějaké povinné parametry. Bohužel jsem nebyl schopen k této metodě nic vysurfovat a tak prosím o nějaké informace od kolegů, kteří něco vědí.

Díky

Editoval m.brecher (10. 9. 2022 17:29)

m.brecher
Generous Backer | 714
+
0
-

Ještě doplním, že fulltext hledáním v adresáři C:\www\cli\project\vendor\nette\forms jsem nalezl zmínku o metodě getUntrustedValues():

'You cannot call getValues() during the validation process. Use getUntrustedValues() instead.'

Což potvrzuje můj pocit, že metoda existuje :).

Marek Bartoš
Nette Blogger | 1146
+
0
-

Stejně jako getValues(), getUntrustedValues('array')
Parametr určuje return type

m.brecher
Generous Backer | 714
+
0
-

Tak už jsem to našel :)

Metoda getUntrustedValues():

https://github.com/…ontainer.php#L135

m.brecher
Generous Backer | 714
+
0
-

@MarekBartoš díky za comment, proto jsem metodu getUntrustedValues() nenašel ve /vendor/nette/forms, protože tam není, ale je ve /vendor/nette/component-model ;)

m.brecher
Generous Backer | 714
+
+1
-

Trochu jsem se podivil, že metoda getValues() nevyžaduje povinný parametr, kdežto getUntrustedValues() vyžaduje, a opravdu ze zdrojového kódu Nette vyplývá, že první parametr je string|object|null $returnType = null, resp. string|object|null $returnType,. Možná by stálo za to aby se tento parametr u obou metod sjednotil a byl nepovinný, protože to asi ničemu nevadí a uživatelé Nette by to asi někteří uvítali.