Změna hodnoty proměnné po vstupu do formuláře
- Honza_Vaclavik
- Člen | 20
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;
}
- Honza_Vaclavik
- Člen | 20
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
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
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é ;)
- Honza_Vaclavik
- Člen | 20
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.