Vyplnění fomuláře s dependecy-selectboxem
- adam_frajer
- Člen | 16
Ahoj,
nedávno jsem narazil na problém ohledně dosazení hodnot formuláře
s dependency-selectboxy.
Můj formulář vypadá takto:
class WorldForm extends Control{
/** @persistent */
public $country = NULL;
/** @persistent */
public $city = NULL;
public function render(){
if($this->country !== null && $this->city !== null){
$this->template->country = $this->country;
$this->template->city = $this->city;
}
else{
$this->template->country = null;
$this->template->city = null;
}
$this->template->setFile(dirname(__FILE__) . '/template.latte');
$this->template->render();
}
protected function createComponentForm()
{
// data pro countries
$countriesArr = [
1 => 'Česká republika',
2 => 'Slovensko',
3 => 'Německo'
];
// data pro cities
$citiesArr = [
1 => [
'Praha',
'Brno',
'Ostrava'
],
2 => [
'Bratislava',
'Košice',
'třetí město'
],
3 => [
'Berlín',
'Mnichov',
'Hamburk'
]
];
$form = new Form();
$country = $form->addSelect('country', 'Stát:', $countriesArr)
->setPrompt('----');
$items = [];
foreach ($countriesArr as $id => $name) {
$items[$id] = $citiesArr[$id];
}
$city = $form->addSelect('city', 'Město:')
->setHtmlAttribute('data-depends', $country->getHtmlName())
->setHtmlAttribute('data-items', $items);
$form->onAnchor[] = function() use($country, $city, $citiesArr) {
$city->setItems($country->getValue()
? $citiesArr[$country->getValue()]
: []);
};
$form->addSubmit('send', 'Hledat');
$form->onSuccess[] = [$this, 'formSucceeded'];
return $form;
}
public function formSucceeded($form, $values)
{
$this->template->values = $values;
$this->city = $values->city;
$this->country = $values->country;
$data = array(
'country' => $values->country,
'city' => $values->city
);
$this->presenter->redirect("this", $data);
}
public function fillData($data){
$this['form']->setDefaults($data);
}
}
Presenter takto:
protected function createComponentForm(){
return $this->wordForm;
}
public function renderDefault($country = null, $city = null){
if (!is_null($country) && !is_null($city)){
$this->wordForm->fillData(['country' => $country, 'city' => $city]);
}
}
Script jsem použil stejný, jako je na nette-foru
Problém je, že když se pokusím formulář znovu načíst a vyplnit data,
data se do city nedoplní, protože toto pole je
onAnchor[].
Chybu mi to hází tuto:
Nette\InvalidArgumentException
Value ‚2‘ is out of allowed set [] in field ‚city‘.
Poradíte prosím jak do pole dosadit defaultní hodnoty?
Editoval adam_frajer (30. 8. 2022 12:04)