výchozý hodnoty formuláře – select a multiselect
- ViliamKopecky
- Nette hipster | 230
Mas3r napsal(a):
Zkus přes setValue();
To bych nedoporučoval, pokud by uživatel hodnotu změnil, tak by to formulář neposlal.
Používejte setDefaults()
- LM
- Člen | 206
enoice napsal(a):
To bych nedoporučoval, pokud by uživatel hodnotu změnil, tak by to formulář neposlal.
Používejte
setDefaults()
setDefaults()
taky vlastně neudělá nic jinýho než že
projde to pole a zavolá nad každým prvkem setValue()
, to že se
takhle přepsala odeslaná hodnota se dělo v dřívějších verzích nebo to
možná dělá jen Form
bez presenteru (odeslané hodnoty se
nastavili prvku hned po přidání do formuláře).
- David Grudl
- Nette Core | 8218
Mezi setValue() a setDefaults() v podstatě není rozdíl, jen je
důležité to udělat v podmínce
if (!$form->isSubmitted()) { ... }
.
- phx
- Člen | 651
Ohledne tohoto jsem nedavno narazil. Mam formular z vice casti (modulu) a kazda cast si generuje svoje prvky a value k nim. Potrebuji value vyplnit pomoci setDefault, ale to pokazde vymaze to co tam dala jina cast. Tak musim nejprve nacit co tam je (getValue()) a pote doplnit co chci a zavolat setDefaults(). Kdyz ale volam poprve getValues() tka mi to vynada, ze formular neni populate(). A at zavolam isSubmitted() nebo setDefautls(). Jenze pri pouziti AppForm isSubmitted() formular nezpopulati:( (ach ta cestina). Ze by BUG?
Mozna by stalo za upravu aby setDefautls() mohlo nastavit vychozi hodnoty jen pro cast formulare (pro container).
OT: Dale i moznost vykresleni samotneho containeru by nebyla spatna. Tusim ze jsi mi to tu nekdy nabizel.
- ViliamKopecky
- Nette hipster | 230
phx napsal(a):
DEKUJI… mozna by ale bylo fajn udelat neco jako clear() nebo setEmptyValues() pro vymazani formulare. Tedy pokud tam nic takoveho neni.
Vznikl tam i druhý parametr s výchozí hodnotou FALSE
, že
neuhodneš co dělá? ;)
- David Grudl
- Nette Core | 8218
enoice napsal(a):
phx napsal(a):
DEKUJI… mozna by ale bylo fajn udelat neco jako clear() nebo setEmptyValues() pro vymazani formulare. Tedy pokud tam nic takoveho neni.
Vznikl tam i druhý parametr s výchozí hodnotou
FALSE
, že neuhodneš co dělá? ;)
Vznikl, ale stejně clear() by asi bylo vhodnější. No uvidíme.
- David Grudl
- Nette Core | 8218
phx napsal(a):
Kdyz ale volam poprve getValues() tka mi to vynada, ze formular neni populate(). A at zavolam isSubmitted() nebo setDefautls().
Ověřování populate je služba programátorovi, která hlídá, jestli formulář používá správným způsobem. To znamená, že před získáváním hodnot metodou getValues() musí být formulář nějak naplněn. Buď tím, že byl odeslán, nebo metodou setDefaults().
- David Grudl
- Nette Core | 8218
phx napsal(a):
A chtel jsem poukazat na to, ze ve AppForm metoda isSubmitted nepopulatizuje formular.
To je divné. isSubmitted v případě odeslání volá loadHttpData, která populate nastaví na TRUE. Žádnou z těchto funkcí AppForm nepřepisuje.
- David Grudl
- Nette Core | 8218
V tom případě ti nemůže AppForm fungovat vůbec. Zkus prosím poslední verzi.
- David Grudl
- Nette Core | 8218
phx napsal(a):
Tak jsem aktualizoval a hazi mi to tuto chybu:(
Warning: array_key_exists() [function.array-key-exists]: The second argument should be either an array or an object in /srv/www/inet-servis.cz/vks/libs/Nette/Forms/Form.php on line 455
A toto je bezezmeny:(
Opravím.
Vyzkoušej examples/akrabat.forms, jestli funguje.
- phx
- Člen | 651
Akrabat.forms jede. Kdyz formular neni odeslan (je jen vytvoren a popripade
nejak naplnen) tak to danou podminkou neprojde. Tudiz formular neni populated:(
Kdyz je form odeslan tak je vse ok. Pres danou podminku to projde a nakonec to v
Form::loadHttpData()
vykona $this->isPopulated = TRUE
- phx
- Člen | 651
Tak me tedy mate toto: Kdyz mam formular a chci z nej dostat data (i kdyz
tam zadna nejsou ani z odeslani ani z meho naplneni) tak mi to vypise toto:
„Form was not populated yet. Call method isSubmitted() or setDefaults().“
Fajn tak jsem ono nacitani obalil do podminky if(!isSubmitted)
.
Kdyz neni odeslano vyplnim data k editaci. Jenze u AppForm metoda isSubmitted
nenastavi pri neodeslanem formulari
$this->isPopulated = TRUE
.
Proc to delam? Mam formular z vice casti (modulu) a kdyz modul nastavuje
svoje vychozi hodnoty. A aby si je nepremazal tak musi nacist puvodni a k nim
ty svoje pridat. Proto volam getValues()
na prazdnem nevyplnenem
formulari. (nejaky mudul je vdzy prvni)
ANO ted uz je to zbytecne, kdyz setDefaults()
nepremazava
ostatni data. Jen jsem to chtel doresit. Takze to asi uzavreme jako OK. Jen ten
warning:)
- David Grudl
- Nette Core | 8218
phx napsal(a):
Tak me tedy mate toto: Kdyz mam formular a chci z nej dostat data (i kdyz tam zadna nejsou ani z odeslani ani z meho naplneni) tak mi to vypise toto: „Form was not populated yet. Call method isSubmitted() or setDefaults().“
Ano, to je záměr.
Fajn tak jsem ono nacitani obalil do podminky
if(!isSubmitted)
. Kdyz neni odeslano vyplnim data k editaci. Jenze u AppForm metoda isSubmitted nenastavi pri neodeslanem formulari$this->isPopulated = TRUE
.
To ale přece platí i pro Form, nejen AppForm. Úkolem metody isSubmitted() není nastavit isPopulated na TRUE (ačkoliv to může být vedlejší efekt, pokud formulář skutečně odeslán byl), ale zjistit, zda-li byl formulář odeslán.
Proc to delam? Mam formular z vice casti (modulu) a kdyz modul nastavuje svoje vychozi hodnoty. A aby si je nepremazal tak musi nacist puvodni a k nim ty svoje pridat. Proto volam
getValues()
na prazdnem nevyplnenem formulari. (nejaky mudul je vdzy prvni)
Rozumím. To jsem právě nechápal.
- LM
- Člen | 206
David Grudl napsal(a):
phx napsal(a):
Tak jsem aktualizoval a hazi mi to tuto chybu:(
Warning: array_key_exists() [function.array-key-exists]: The second argument should be either an array or an object in /srv/www/inet-servis.cz/vks/libs/Nette/Forms/Form.php on line 455
A toto je bezezmeny:(
Opravím.
Po téhle opravě rev.158 setDefaults
ignoruje struktury
skládající se z ArrayObject
, třeba:
array(3) {
"name" => …
"address" => object(DibiRow) {
…
}
}