Předání parametrů jinému presenteru
- n.u.r.v.
- Člen | 485
Ahoj, dělám si svojí první aplikaci v nette a narazil jsem se na následující problém:
Uživatel může přistoupit na mojí stránku pomocí odkazu, který buď má 4 parametry, nebo žádný. Když nepoužije parametry, přesměruji ho na jiný presenter s přihlašovacím formulářem (pomocí redirect(Sign:in)).
To funguje…
Další možnost je ten přístup s parametry…Když uživatel odešle parametry, já je nejdřív zvaliduju, zda jsou správné – v presenteru si načtu ty parametry do proměnných, pak předám do příslušného repositáře, kde parametry ověřím a vrátím výsledek zda OK… to funguje, ale teď bych potřeboval zase přesměrovat na jiný presenter, který vykreslí formulář, ale do kterého já vložím do 4 hidden polí ty 4 parametry – a tady jsem skončil – nemůžu přijít na to, jak předat ty parametry…
Díky za radu/nakopnutí…
Uvádím můj kod:
HomePresenter:
public function startup() {
parent::startup();
if ($this->getUser()->isLoggedIn()) {//pokud je uživatel přihlášen
$this->redirect('Admin:default');
} else {
$p1 = $this->getHttpRequest()->getQuery("par1");
$p2 = $this->getHttpRequest()->getQuery("par2");
$p3 = $this->getHttpRequest()->getQuery("par3");
$p4 = $this->getHttpRequest()->getQuery("par4");
$this->firstsignRepository = $this->context->firstsignRepository;
if ($p1 != "" and $p2 != "" and $p3 != "" and $p4 != "") {//pokud vsechny parametry vyplneny
$overeni = $this->firstsignRepository->over_kody($p1, $p2, $p3, $p4);//overim parametry
if($overeni=="correct"){//pokud overeni proslo, zobrazim formular - to funguje
$this->redirect('Firstsign:'); //TADY NĚJAK POTŘEBUJI PŘEDAT TY PARAMETRY
}else{//overeni neproslo!!
$this->setView('notFound');
}
} else {//pokud nejaky parametr nevyplnen, presmeruji na klasicke prihlaseni - to funguje
$this->redirect('Sign:in');
}
}
}
FirstsignPresenter:
//VYKRESELNI FORMULARE - DO NEHO POTREBUJI PREDAT PARAMETRY (samotne vlozeni do formu umim, jen to dostat sem do te metody je problem)
protected function createComponentSignInForm() {
$form = new Form();
//$form->setAction('pages/login.php');
$form->setMethod('POST');
$form->addText('email', 'E-mail:')
->setRequired('Zadejte prosím Váš e-mail!')
->setAttribute('name', 'email')
->addRule(Form::EMAIL, "Vložený e-mail je ve špatném formátu!");
$form->addPassword('password', 'Heslo:')
->setRequired('Zvolte si heslo')
->setAttribute('onkeyup', 'passwordStrength(this.value);')
->setAttribute('id', 'pass')
->addRule(Form::MIN_LENGTH, 'Heslo musí mít alespoň %d znaků', 6);
$form->addPassword('passwordVerify', 'Heslo pro kontrolu:')
->setRequired('Zadejte prosím heslo ještě jednou pro kontrolu')
->addRule(Form::EQUAL, 'Hesla se neshodují', $form['password']);
$form->addSubmit('send', 'Registrovat');
$form->onSuccess[] = $this->signInFormSubmitted;
return $form; // vykreslí formulář
}
- vitkutny
- Člen | 73
https://api.nette.org/…mponent.html#…
$this->redirect('Firstsign:'); //TADY NĚJAK POTŘEBUJI PŘEDAT TY PARAMETRY
$this->redirect('Firstsign:',array(
'par1' => $p1,
'par2' => $p2,
'par3' => $p3,
'par4' => $p4,
));
Případně využít persistentní parametry jestli je to možné
- Glottis
- Člen | 129
n.u.r.v. napsal(a):
jj,díky, takže pak se na ně zas dostanu pomocí „$p1 = $this->getHttpRequest()->getQuery("par1“);".
podívám se na to…ještě dotaz je to pak možné předat jako post a ne get, protože takto jsou vidět v http adrese…
Díky…
dostanese se na ne i takhle – alespon v nete 2.1
$this->getParam(‚par1‘);