Proč je defaultValue write only?

Upozornění: Tohle vlákno je hodně staré a informace nemusí být platné pro současné Nette.
Majko
Člen | 11
+
0
-

Ahoj,

může mi někdo ve stručnosti vysvětlit z jakého důvodu je ve třídě Nette\Forms\Controls\BaseControl proměnná $defaultValue označená jako write-only?

Proč si nelze na tuto proměnnou šáhnout a třeba si ověřit, jestli je aktuální hodnota stejná jako ta defaultní?

Nedávno jsem narazil na drobnost – mám form s inputem „username“, kde si uživatel může svůj username změnit. Proč neexistuje metoda $form[„username“]->hasChanged(), která by porovnala aktuální hodnotu vůči defaultní? Existuje nějaká jiná možnost jak tohle provést, aniž bych musel šahat do db? Pletu se?

Rád bych metodu hasChanged() dopsal, můžeme udělat $defaultValue čitelnou? Jaké by to mělo následky? Pokud projdou testy, tak by to mohlo být ok, ne?

David Matějka
Moderator | 6445
+
0
-

1. defaultValue je write-only, jelikoz se v BaseControlu nikam neuklada. Pokud nebyl formular odeslany, nastavi se jako „value“, jinak se zahodi
2.

Existuje nějaká jiná možnost jak tohle provést, aniž bych musel šahat do db?

I kdyby tam bylo neco jako „hasChanged“, ktere by to porovnavalo vuci defaultni, tak bys nejdriv musel onu defaultni hodnotu nastavit – a tedy sahnout do db.

CZechBoY
Člen | 3608
+
0
-

A jakej je rozdíl jestli si uživatel username změní nebo ne? Když se nezmění tak updatneš na stejnou hodnotu = žádná změna, když změní tak updatneš …

Nešlo by použít perzistentní parametr? Nebo to se používá k něčemu jinýmu?

Aurielle
Člen | 1281
+
0
-

Persistentní parametr v tomhle kontextu asi použít nejde. Resp. nenapadá mě, jak by to šlo správně provést.

duke
Člen | 650
+
0
-

Pokud chceš zjišťovat změnu bez sahání do db, můžeš si tam přidat hidden input s původní hodnotou (či jejím hashem) a tyto pak porovnávat.

Pokud ti jde pouze o jednu konkrétní výchozí hodnotu a nepotřebuješ mít zvlášť i možnost prázdné hodnoty, můžeš to řešit pomocí setEmptyValue() a výchozí hodnotu ukládat jako prázdnou.