Page not found při odkazu na akci
- mimacala
- Člen | 113
Ahojte,
při obnově hesla zašlu na email odkaz pomocí funkce ObnovitOk.
Odkaz v sobě nese klíč a email uživatele, odkazuje na actionKontrola kde
kontroluji zda je klíč v pořádku, ale pak už se mi nezobrazí form
v šabloně default.latte, která je součástí presenteru kde je
actionKontrola.
Hodí mi to hlášku page not found :/
Moc děkuji za vysvětlení, vůbec nevím co přehlížím nebo si neuvědomuji.
public function actionKontrola($klic,$email){
$db = $this->uzivatele->DataKde("email", $email)->fetch();
if(!$db->obnova == $klic)
{
$this->flashMessage("Nevalidní klíč", "error");
$this->redirect("Homepage:");
}
$this->obnEmail = $email;
}
public function renderDefault(){
}
public function createComponentReset()
{
$form = new Form;
$form->addPassword('reset');
$form->addSubmit('obnovit');
$form->onSuccess[] = [$this, 'ResetOk'];
return $form;
}
public function ResetOk(Form $form,$data): void
{
$passwords = new Passwords(PASSWORD_BCRYPT, ['cost' => 12]);
$res = $passwords->hash($data->password);
$upravheslo = $this->uzivatele->DataKde("email", $this->obnEmail)->update("heslo", $res);
if($upravheslo)
{
$this->flashMessage("Heslo bylo úspěšně nastaveno", "success");
$this->redirect("Prihlaseni:prihlasit");
}
}
tady generuji link
public function ObnovitOk(Form $form,$data): void
{
$db = $this->uzivatele->Data()->fetchAll();
foreach ($db as $dbklic)
{
if($data->email == $dbklic->email)
{
$klic = rand(1001, 100000);
$url = $this->link("//Reset:kontrola", $klic, $data->email);
$odeslat = $this->smsmodel->OdeslatEmail("obnova účtu - <info@test.cz>", $data->email, "Obnova účtu [test]", $url);
$nastav = $this->uzivatele->DataKde("email", $data->email)->update([ "obnova" => $klic ]);
$this->flashMessage("Na email byl zaslán link pro obnovu hesla", "success");
$this->redirect("Homepage:");
} else{
$this->flashMessage("Email neexistuje", "error");
$this->redirect("Homepage:");
}
}
}
- nightfish
- Člen | 519
@mimacala Když máš actionKontrola()
, hledá se
standardně šablona kontrola.latte
. Takže buď v
actionKontrola()
volej
$this->setView('default');
– tím se ti zajistí vykreslení
šablony default.latte
a nebo actionKontrola()
přejmenuj na actionDefault()
– s tím, že bude potřeba
ještě upravit generování odkazu (Reset:default
).