Změna hodnoty proměnné po vstupu do formuláře

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

Zdravím,
několik hodin se už trápím s problémem, kde potřebuji dostat do formuláře hodnotu získanou GETem z URL. Hodnotu zachytnu v presenteru a pak jí dávám jako parametr do factory na formulář. Poté jí přidávám do formuláře jako Hidden. Hodnota proměnné se ale po vstupu do formuláře změní na název této komponenty.

Tady je odkaz na výstup z jediného dumpu. Nevím, proč se zobrazuje dvakrát a hlavně s rozdílnými hodnotami.

Presenter

	public function renderPasswordReset()
	{
		$rKey = $this->httpRequest->getQuery('key');
		if($rKey == '')
		{
			$this->getPresenter()->redirect('Homepage:default');
		}

		$form = $this->createComponentPasswordReset($rKey);


	}
	public function createComponentPasswordReset($rKey)
	{
		dump($rKey);
		$form = $this->signFormFactory->createPasswordReset($rKey);

		return $form;



	}

Form

public function createPasswordReset($rKey)
	{

		$form = new Form();
		$form->addHidden('resetKey')
			->setValue($rKey);
		$form->addPassword('password', 'Nové heslo: *', 20)
			->setOption('description', 'Alespoň 6 znaků')
			->addRule(Form::FILLED, 'Vyplňte Vaše heslo');
		$form->addPassword('password2', 'Nové heslo znovu: *', 20)
			->addConditionOn($form['password'], Form::VALID)
			->addRule(Form::FILLED, 'Heslo znovu')
			->addRule(Form::EQUAL, 'Hesla se neshodují.', $form['password']);

		$form->addSubmit('reset', 'Obnovit');

		$form->onSuccess[] = function ($form, $values) {
			//dump($values['resetKey']);
			//dump($values['password']);
			$this->userManager->changeEmployeePassword($values['resetKey'], $values['password']);
			$form->getPresenter()->redirect('Sign:In');

		};
		return $form;
	}
premek_k
Člen | 172
+
0
-

Myslím, že když to přesuneš z „render“ metody do „action“ metody, tak to bude asi funkční.

Honza_Vaclavik
Člen | 20
+
0
-

premek_k napsal(a):

Myslím, že když to přesuneš z „render“ metody do „action“ metody, tak to bude asi funkční.

To bohužel nepomohlo. Není nějaká jiná metoda, jak tam tu hodnotu z GETu dostat?

premek_k
Člen | 172
+
+1
-

No jistě, má chyba. Nějak takhle by to mohlo jít:

<?php

private $key;

public function actionPasswordReset()
{
    $rKey = $this->httpRequest->getQuery('key');
    if($rKey == '')
    {
        $this->getPresenter()->redirect('Homepage:default');
    }

	$this->key = $rKey;
}


public function createComponentPasswordReset()
{
    dump($this->key);
    $form = $this->signFormFactory->createPasswordReset($this->key);

    return $form;
}

?>

EDIT: ta metoda „createComponent…“ se ti zavolá sama, až se render dostane k tomu formuláři.

Editoval premek_k (30. 1. 2016 21:23)

Honza_Vaclavik
Člen | 20
+
0
-

premek_k napsal(a):

No jistě, má chyba. Nějak takhle by to mohlo jít:

<?php

private $key;

public function actionPasswordReset()
{
    $rKey = $this->httpRequest->getQuery('key');
    if($rKey == '')
    {
        $this->getPresenter()->redirect('Homepage:default');
    }

	$this->key = $rKey;
}


public function createComponentPasswordReset()
{
    dump($this->key);
    $form = $this->signFormFactory->createPasswordReset($this->key);

    return $form;
}

?>

EDIT: ta metoda „createComponent…“ se ti zavolá sama, až se render dostane k tomu formuláři.

Díky moc, ta hodnota je už správná, ale neprovede se mi onSuccess při odeslání Formu. Jsem z tho už zoufalý, začátky jsou složité ;)

matto
Člen | 55
+
+1
-

Namiesto:

public function actionPasswordReset()
{
    $rKey = $this->httpRequest->getQuery('key');

je elegantnejsie:

public function actionPasswordReset($key)
CZechBoY
Člen | 3608
+
0
-

Pokud se nezavola onSuccess tak bude nekde ve formulari chyba. Pridej onError a vypis si chyby.

Honza_Vaclavik
Člen | 20
+
0
-

CZechBoY napsal(a):

Pokud se nezavola onSuccess tak bude nekde ve formulari chyba. Pridej onError a vypis si chyby.

Problém byl v tom url parametru. Při načtení se smazal z URL a potom se provedlo tohle a skončil jsem na domovské stránce.

		$this->key = $this->httpRequest->getQuery('key');
		if($this->key == '')
		{
			$this->getPresenter()->redirect('Homepage:default');
		}

Problém vyřešil persistentní parametr.