Sign:out/Sign:in presmerovanie v layout.latte
- Br0visT
- Člen | 17
Zdravím, mám trochu problém s pochopením, ako sa v programe dohľadáva
potrebná šablóna, presenter…
Ide v podstate o tri súbory:
@layout.latte
./Sign/in.latte
../SignPresenter.php
v @layout.latte mám:
{if $user->loggedIn}
<li class="nav-item active ml-2 mr-2">
<a class="nav-link" n:href="Sign:in">Prihlásenie<span class="sr-only">(current)</span></a>
</li>
{else}
<li class="nav-item active ml-2 mr-2">
<a class="nav-link" n:href="Sign:out">Odhlásenie<span class="sr-only">(current)</span></a>
</li>
{/if}
teda, že keď je používateľ prihlásený, zobraz tlačítko na odhlásenie (ak nie je, prihlásenie)
Mám teda problém pochopiť, čo znamená to presmerovanie Sign:in a
Sign:out…
Resp. predstavme si, že nie som prihlásený, kliknem na tlačidlo Prihlásenie
a presmeruje ma do zložky ./Sign/in.latte ?
V ktorej je:
{block content}
<h1 n:block=title>Prihlásenie</h1>
{control signInForm}
{/block}
teda vlastne link na funkciu
protected function createComponentSignInForm(): Form
v subore
SignPresenter.php, ktoreho obsah je:
<?php
namespace App\Presenters;
use Nette;
use Nette\Application\UI\Form;
class SignPresenter extends Nette\Application\UI\Presenter
{
protected function createComponentSignInForm(): Form
{
$form = new Form;
$form->addEmail('email', 'Email:')
->setRequired('Vypíšte prihlasovací email.');
$form->addPassword('password', 'Heslo:')
->setRequired('Vypíšte heslo.');
$form->addSubmit('submit', 'Prihlásiť');
$form->onSuccess[] = [$this, 'signInFormSucceeded'];
return $form;
}
public function signInFormSucceeded(Form $form, \stdClass $values): void
{
try {
$this->getUser()->login($values->email, $values->password);
$this->redirect('Homepage:');
} catch (Nette\Security\AuthenticationException $e) {
$form->addError('Nesprávne prihlasovacie meno alebo heslo.');
}
}
public function actionOut(): void
{
$this->getUser()->logout();
$this->flashMessage('Odhlásenie bolo úspešné.');
$this->redirect('Homepage:');
}
}
?>
takže spustí sa prvá funkcia, ktorá keď úspešne prejde, spustí druhú funkciu, pričom ak je v configu rovnaké meno/heslo ako vo formulári, prihlási ma…
Ak prihlasovanie chápem správne, tak fajn. Ak nie, prosím opravte ma.
Čo však asi nechápem je odhlasovanie, keďže v layoute je Sign:out, no
out.latte neexistuje, avšak
v SignPresenter.php je
public function actionOut(): void
, funkcia, ktorá uživateľa
odhlási… ako sa ku nej program teda dostane?
Ďakujem,
v prípade, že som niečo nezrozumiteľne napísal, dajte vedieť.
- David Matějka
- Moderator | 6445
Odkazy vedou na presentery (tedy SignPresenter) a jejich akce. Až poté se hledá a vykresluje šablona. u actionOut je redirect na HomepagePresenter, takže k vykreslování šablony nedojde.
Doporučuju si nastudovat dokumentaci, v tomhle případě https://doc.nette.org/…n/presenters