Persistentní pole presenteru a get formulář
- Čelo
- Člen | 42
Narazil jsem na takový problém.
Mám presenter s persistentní proměnnou typu pole.
/** @persistent */
public $mista = [];
a pak mám klasický GET formulář (zjednodušeně)
$form = new Nette\Application\UI\Form;
$form->setMethod('GET');
$form->addMultiSelect('mista','Místa',
['praha'=>'Praha','brno'=>'Brno','olomouc'=>'Olomouc','kardasova_recice'=>'Kardašova Řečice']
)->setDefaultValue($this->mista);
Tento postup pro klasické inputy, selecty, checkboxy funguje bez problému. Problém v tomto případě nastává v použití pole, které způsobuje, že odesláním formuláře se hodnoty do pole a výběru přidávají, ale v podstatě je jejich odebírání naprosto ignorováno. Formulář (bohužel logicky) po odeslání na getValues vlastně nevrací odeslané hodnoty, ale i ony „persistentní“ hodnoty, takže funguje jen rozšiřování pole. Totéž chování v tomto nastavení platí i pro checkboxlist.
Jediné řešení, které mne napadlo bylo přejmenovat multiselect (třeba na „form_mista“) a touto hodnotu pak při odeslání formuláře přepisovat onu persistentní. V presenteru mám něco jako:
$params = $this->params;
if ($form->isSubmitted()) {
$this->mista = (isset($params['form_mista']) ? $params['form_mista'] : NULL);
}
$form['mista']->setDefaultValue($this->mista);
Nenapadá vás nějaké lepší řešení nebo je to ok?
Editoval Čelo (27. 6. 2017 9:35)