Nelze nastavit hodnut selectboxu
- cafesk8
- Člen | 103
Zdravím,
mám komponentu formuláře, která dědí od
WebChemistry\Forms\Controls\Wizard
, po změně hodnoty v textovém
inputu potřebuji zvolit jednu z hodnot v selectboxu. Problém je, že mi to
funguje pouze poprvé, když krok potvrdím a vrátím se zpět, tak se mi již
hodnoty dle hodnoty nenastavují.
Presenter
use Wizard;
final class HomepagePresenter extends BasePresenter {
/** @var Wizard */
private $wizard;
public function __construct(Wizard $wizard) {
$this->wizard = $wizard;
}
protected function createComponentWizard(): Wizard {
return $this->wizard;
}
public function handleChangeStep($step): void {
$this->getComponent("wizard")->setStep($step);
$this->redirect("this");
}
public function handleSetSelectValue($text_value) {
$form = $this->getComponent('wizard')->getComponent('step2');
$form['my_select']->setValue($my_value);
if ($this->isAjax()) {
$this->redrawControl('wizardArea');
$this->redrawControl('mySelect');
} else {
$this->redirect('this');
}
}
}
Wizard
class Wizard extends WebChemistry\Forms\Controls\Wizard {
protected function createStep1(): Form {
$form = $this->createForm();
...
$form->addSubmit(self::NEXT_SUBMIT_NAME, 'Next');
return $form;
}
protected function createStep2(): Form {
$values = $this->getValues(true);
$form = $this->createForm();
$form->addText('my_text', 'Trigger for setting value')
->addRule(Form::NUMERIC)
->addRule(Form::RANGE,'Must be between %d and %d m2',[1,500])
->setRequired('This is required');
$form->addSelect('my_select','Set value in here ', ['foo'=>'Foo','bar'=>'Bar'])
->checkAllowedValues = false;
$form->addSubmit(self::PREV_SUBMIT_NAME, 'Back');
$form->addSubmit(self::NEXT_SUBMIT_NAME, 'Next');
$form->onAnchor[] = function (Form $form): void {
$form_vals = $form->getValues(true);
$wizard_vals = $this->getValues(true);
if(array_key_exists('my_text',$form_vals)) {
$my_text = $form_vals['my_text'];
if(array_key_exists('my_text', $wizard_vals) && !$form->isSubmitted()) {
$my_text = $wizard_vals['my_text'];
}
$form['my_select']->setValue($my_text);
}
};
return $form;
}
protected function createStep3(): Form {
$form = $this->createForm();
...
$form->addSubmit(self::PREV_SUBMIT_NAME, 'Back');
$form->addSubmit(self::FINISH_SUBMIT_NAME, 'Register');
return $form;
}
}
Nevíte někdo co s tím? Když jsem dle hodnoty v textovém inputu plnil hodnoty do selectboxu tak mi to fungovalo, ale pokud chci v selectboxu vybrat hodnotu, tak se snippet sice rádoby překresluje, ale hodnota se nemění (v response je stále hodnota před přejitím na krok č. 3).
- cafesk8
- Člen | 103
Zjistil jsem, že $form_vals
je prázdné. Jak to je
možné?
$form->onAnchor[] = function (Form $form): void {
$form_vals = $form->getValues(true);
};
Normálně vše funguje při prvním kroku jak má, ale po uložení a návrat zpět na krok se selectboxem tak se pořád vyplňuje naposled uložená hodnota a $form_vals je prázdné. Nevíte někdo?
@Martk Možná to má něco společného konkrétně s kompomentou webchemistry/form-wizard?
- Martk
- Člen | 661
Nemělo by to být takto?
$my_text = null;
if (array_key_exists('my_text', $wizard_vals) && !$form->isSubmitted()) {
$my_text = $wizard_vals['my_text'];
} else if (array_key_exists('my_text',$form_vals)) {
$my_text = $form_vals['my_text'];
}
$form['my_select']->setValue($my_text);
popř.
$my_text = $wizard_vals['my_text'] ?? $form_vals['my_text'] ?? null;
$form['my_select']->setValue($my_text);
Editoval Martk (19. 6. 2019 17:51)
- cafesk8
- Člen | 103
Nikoho nic nenapadá? Už do toho koukám a zkouším vše možné několikátý den a pořád ne a ne nic vymyslet :/
cafesk8 napsal(a):
@Martk: No když to mám takto, tak na
onAnchor
se do$my_text
vždy přepíše hodnota, která byla nastavená po posledním submitu a nebere to v potaz změny, které dělám ve formuláři. Logicky proto, že ve$form_vals
se nějak neukládá současná hodnota mého inputu.