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
onAnchorse do$my_textvž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_valsse nějak neukládá současná hodnota mého inputu.