Vánoční nadílka Vánoční nadílka
Vánoční akce! Daruj lepší budoucnost blízkým nebo sobě. Až +50 % zdarma na dárkové poukazy. Více informací
Avatar
Adam Matis
Člen
Avatar
Adam Matis:3. října 23:50

Dělám si vlastní mvc 'framework' a ted si trochu nevím rady s odhlášením uživatele. Resp spíše jak zjistím, že uživatel kliknul na button ?

Zkusil jsem: Dokázal bych to udělat tak, že bych měl button ve formu a do action bych dal funkci která zničí session + přesměruje jinam ale chtěl bych to vyřešit nějak lépe.
Měl by pro mě někdo nějaký tip ? Dkěuji

Chci docílit: Udělat odhlášení podle pravidel mvc.

 
Odpovědět 3. října 23:50
Avatar
dez1nd
Člen
Avatar
Odpovídá na Adam Matis
dez1nd:4. října 5:58

musíš to udělat přes formulář.

 
Nahoru Odpovědět  -2 4. října 5:58
Avatar
Zdeněk Srb
Člen
Avatar
Zdeněk Srb:4. října 9:07

používám toto:

<ul class="navbar-nav ml-auto">
<?php if(isset($_SESSION['user_id'])) : ?>
  <li class="nav-item">
    <a class="nav-link" href="<?php echo URLROOT; ?>/users/logout"><i class="fa fa-sign-out" aria-hidden="true"></i> Logout</a>
  </li>
<?php else : ?>
  <li class="nav-item">
    <a class="nav-link" href="<?php echo URLROOT; ?>/users/register">Register</a>
  </li>
  <li class="nav-item">
    <a class="nav-link" href="<?php echo URLROOT; ?>/users/login">Login</a>
  </li>
<?php endif; ?>
</ul>

používám nějaký základní systém co parsuje url a podle toho vola třídu/metodu kontroleru, to asi používáš také

Editováno 4. října 9:08
 
Nahoru Odpovědět  +1 4. října 9:07
Avatar
petr.jouza
Člen
Avatar
Odpovídá na Adam Matis
petr.jouza:5. října 8:03

Ahoj, sice neznám pravila MVC, ale používám jednoduché funkční řešení.

mám stránku odhlasit.php, kde zničím SESSION, COOKIE (uložený token) provedu nějaký zápis do DB k tokenu a přesměruju uživatele někam.

Příklad (bez mého SQL):

<?php
session_destroy() ;
setcookie('token', $token, time() - 3600) ;
header('Location: ./index.php?logOff') ;
exit() ;

a na každé stránce má uživatel k dispozici tlačítko pro odhlášení, které ho přesměruje pouze na stránku odhlasit.php

 
Nahoru Odpovědět 5. října 8:03
Avatar
Adam Matis
Člen
Avatar
Odpovídá na petr.jouza
Adam Matis:5. října 10:44

Ahoj děkuji za odpověď ale já nemám problém s php kodem ale spíše jak danou funkci (metodu) zavolat.

resp asi bych mohl udělat něco jako

<form action="odhlaseni.php" method="post">
<button  type="submit" name="odhlaseni" class="btn btn-primary">Odhlášení</button>
</form>

Ale když už teda dělám to mvc, tak bych si představoval že bych měl logku spíše v modelu.

Ještě mě teď napadla jedna věc že bych si udělal statickou metodu na odhlaseni a tu bych dal do "action" bylo by to dobře i po stránce mvc architektury ?

 
Nahoru Odpovědět 5. října 10:44
Avatar
petr.jouza
Člen
Avatar
Odpovídá na Adam Matis
petr.jouza:5. října 10:52

Aha... Jak jsem psal. MVC neznám. S tím ti asi neporadím.

Já mám tlačítko velice jednoduše a tupě vytvořené jen takto:

<a href="./odhlasit.php"><button type="button">Odhlásit</button></a>
 
Nahoru Odpovědět  +1 5. října 10:52
Avatar
Jirka Jr
Člen
Avatar
Odpovídá na Adam Matis
Jirka Jr:5. října 12:23

Hele architektura mvc nemá žádná pravidla pro odhlášení.
Jen řeší oddělení prezentace (View), řídícího kódu (Controller) a toho, co ta aplikace vlastně dělá (Model)

  1. to co zničí session, je z pohledu MVC Model
  2. to co vyplivne do browseru odhlašovací formulář nebo odkaz, je z pohledu MVC View
  3. a pak máš nejspíš nějakej MVC Controller a v něm akci, která volá ten odhlašovací kód z Modelu a pak přesměruje někam jinam

takže se připojuju, k tomu, co výše sepsal Zdeněk Srb

 
Nahoru Odpovědět  +1 5. října 12:23
Avatar
Jirka Jr
Člen
Avatar
Odpovídá na Adam Matis
Jirka Jr:5. října 12:36

A ještě malá poznámka:

Pokud kód, který se provádí v nějaké akci nějakého Controlleru, není moc velký, tak nemusí nutně být oddělen zvlášť do samostatné Model třídy

Takže klidně ten kód pro odhlášení můžeš mít klidně v té odhlašovací akci toho users controlleru nebo authentication controlleru, nebo co tam máš ... protože zničení session fakt není dlouhý kód :-)

oddělit odhlašování nebo jakýkoli jiný modelový kód zvlášť do modelové třídy má smysl až ve chvíli, kdy

  • se ten kód rozroste
  • používáš v dané akci více různých strategií .... třeba v případě přihlášení/od­hlášení používáš víc různých autentizačních metod (lokální účet, facebook účet, google účet a pod)
  • nebo potřebuješ stejný kód akce poskytovat aj na web aj do api a není dobré ho mít duplikovaný na dvou místech
 
Nahoru Odpovědět 5. října 12:36
Avatar
Zdeněk Srb
Člen
Avatar
Zdeněk Srb:5. října 13:49

Asi bych se jako podíval na ten kurz objektový redakční systém MVC v PHP, tohle se tam určitě řeší.

 
Nahoru Odpovědět 5. října 13:49
Avatar
Roman Havránek:10. října 14:52

Ahoj,

určitě máš nějaký login controler, který můžeš zavolat přes js a on ti něco vrátí, tzn. button bude mít value = "logout", tu pošleš do controleru, ten tě odhlásí, response bude třeba string "lotOutSuccess" a přesměruješ v JS.

Jednoduché, funkční a hlavně asi správné.

Nahoru Odpovědět 10. října 14:52
sleep();
Avatar
Mirek Slouka
Člen
Avatar
Odpovídá na Adam Matis
Mirek Slouka:11. října 10:52

Podle nějakých "pravidel" MVC se to dá řešit tím způsobem, že v controlleru, např. UserController budeš mít metodu logout, na kterou když se odkážeš přes url: localhost/user/lo­gout. Dovnitř do té metody jen napíšeš co chceš, aby se stalo potom. Takže podle toho co jsem vyčetl tak zničíš session a přesměruješ to na login.

Akceptované řešení
+20 Zkušeností
+1 bodů
Řešení problému
Nahoru Odpovědět  +1 11. října 10:52
I can explain it to you, but I can't understand it for you.
Děláme co je v našich silách, aby byly zdejší diskuze co nejkvalitnější. Proto do nich také mohou přispívat pouze registrovaní členové. Pro zapojení do diskuze se přihlas. Pokud ještě nemáš účet, zaregistruj se, je to zdarma.

Zobrazeno 11 zpráv z 11.