Persistentní pole presenteru a get formulář

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

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)