Nelze nastavit hodnut selectboxu

cafesk8
Člen | 103
+
0
-

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
+
0
-

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
+
0
-

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
+
0
-

@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.

cafesk8
Člen | 103
+
0
-

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.