Předání parametrů jinému presenteru

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

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ář
    }
Glottis
Člen | 129
+
0
-

melo by snad fungovat neco jako

<?php
$this->redirect('Sign:in', array('par1'=>$par1, ....));
?>
vitkutny
Člen | 73
+
0
-

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é

n.u.r.v.
Člen | 485
+
0
-

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…

vitkutny
Člen | 73
+
0
-

můžeš zkusit využít session, před redirectem si tam uložit pole s parametry a potom v presenteru Firstsign si je z tama vytáhnout

Glottis
Člen | 129
+
0
-

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‘);