Proč je defaultValue write only?
- Majko
- Člen | 11
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
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.
- duke
- Člen | 650
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.