Předávání proměnné do componenty formuláře

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

Ahoj,
mám databázi promo kódů. Každý promo kód má své odměny.
Potřebuju formulář s vypsanými odměnami dle promokódu, který návštěvník zadá v předchotím kroku.

Všechno jde, dokud nedám odeslat formulář, ve které se vybere odměna.

V proměnné $this->currentBenefits je pole s odměnami, ale evidentě si je neudrží po odeslání formuláře, protože když dumpnu $form->getValues(), tak benefit je NULL.

<?php
function createComponentSelectBenefitForm($form) {
	$form = new Form();

	$benefits = $this->currentBenefits;

        $form->addSelect('benefit', 'Zvolte odměnu', $benefits)
            ->addRule(Form::FILLED, 'Zvolte odměnu');


		$form->addText('name', 'Vaše identifikace')
			->addRule(Form::FILLED, 'Vyplňte Vaši identifikaci');

		$form->addSubmit('send', 'Odeslat');

        $form->onSuccess[] = callback($this, 'selectBenefitSubmit');

        return $form;
    }
?>
David Matějka
Moderator | 6445
+
0
-

kde a jak plnis currentBenefits?

Sejber
Člen | 10
+
0
-

matej21 napsal(a):

kde a jak plnis currentBenefits?

<?php
	protected $currentBenefits = NULL;
    protected $benefits = array(
		'promo007' => array(
			0 => 'LCD Televizor',
			1 => 'Mikrovlná trouba',
			2 => 'Varná konvice',
			3 => 'Hrnek na kafe',
		),
		'promo008' => array(
			0 => '10 000 CZK',
			1 => '385 EUR',
			2 => '526 USD',
		),
	);
    function insertCodeSubmit($form) {
        $code = $form['code']->getValue();
        if ($this->checkPromoCode($code)) {
            $this->template->codeIsInserted = true;
			$this->setCurrentBenefits($code);
        } else {
            $this->template->codeIsInserted = false;
			$this->flashMessage('Neplatný promo kód!','error');
        }
    }

	function setCurrentBenefits($code) {
		$this->currentBenefits = $this->getBenefitsByCode($code);
	}
    function getBenefitsByCode($code) {
        return $this->benefits[$code];
    }
?>
David Matějka
Moderator | 6445
+
0
-

nejlepsi bude bud si ten „code“ dat do url (z insertCodeSubmit presmerovat $this->redirect('someAction', array('code'=>$code));) nebo ho propasovat do druhyho formu jako skryty input