Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [zend] nie wyświetlają się wartości zmiennych sesyjnych
Forum PHP.pl > Forum > PHP > Frameworki
nieraczek
Chcę żeby po zalogowaniu użytkownika w zmiennych sesyjnych były zapamiętywane: id_uzytkownika i jego imie pobrane z tabeli zeby potem mozna je bylo wyswietlic na kazdej stronie dostepnej po zalogowaniu, a przy uzyciu funkcji ZF do sesji nie udaje mi sie potem wyswietlic wartosci zmiennych sesyjnych.

Klasę kontrolera logowania: class AuthController extends Zend_Controller_Action zrobiłem wg tego tutoriala:
http://developer.denken.com.br/wp-content/...nd-auth_105.pdf

W funkcji odpowiedzialnej w tym kontrolerze za logowanie po tym jak juz zweryfikowano tozsamosc logujacego dałem:
  1. <?php
  2. $login=$this->getRequest()->getPost('login'); //pobiera login wpisany przez uzytkownika w formularzu logowania
  3. $przestrzennazw1 = new Zend_Session_Namespace('sesja1');
  4.                    
  5. $uzytkownicyTabela = new UzytkownicyTable();
  6.                    
  7. $uzytkownik = $uzytkownicyTabela->znajdz($login); //zwraca wiersz tabeli dla danego uzytkownika
  8.  
  9. /*
  10. mimo ze mam jeden wiersz to musze zrobic ponizej petle bo jakbym zapisal tak:
  11. $przestrzennazw1->id_uzytkownika = $uzytkownik['id_uzytkownika'];
  12. $przestrzennazw1->imie = $uzytkownik['imie'];
  13. to nic by nie zostało przypisane do zmiennych sesyjnych
  14. */                    
  15. foreach($uzytkownik as $wiersz):
  16. $przestrzennazw1->id_uzytkownika = $wiersz['id_uzytkownika'];
  17. $przestrzennazw1->imie = $wiersz['imie'];
  18. endforeach;
  19. ?>



Jak zamiast tych funkcji Zend Frameworka zrobię w normalnym PHP to o dziwo działa.
  1. <?php
  2. $login=$this->getRequest()->getPost('login');
  3.  
  4. session_start(); //rozpoczecie sesji - nawet jak to pomine to i tak wszystko dziala, nie wiem czemu
  5.  
  6. $uzytkownicyTabela = new UzytkownicyTable();
  7. $uzytkownik = $uzytkownicyTabela->znajdz($login); //zwraca wiersz tabeli dla danego uzytkownika
  8.  
  9.  
  10. foreach($uzytkownik as $wiersz):
  11. $_SESSION['id_uzytkownika'] = $wiersz['id_uzytkownika'];
  12. $_SESSION['imie'] = $wiersz['imie'];
  13. endforeach;
  14. ?>








W funkcji odpowiadającej za wylogowanie w tym kontrolerze dodałem:
  1. <?php
  2. unset ($przestrzennazw1->id_uzytkownika);
  3. unset ($przestrzennazw1->imie);
  4. ?>




Na innych stronach dostepnych po zalogowaniu w kontrolerach umieszcza się funkcję:
public function preDispatch()
{
}
Nic w niej związanego z sesjami nie dodawałem.

I jak próbuję na dowolnej stronie dostępnej po zalogowaniu wyświetlić wartości zmiennych sesyjnych:
  1. <?echo $przestrzennazw1->id_uzytkownika ?>
  2. <?echo $przestrzennazw1->imie ?>


To nic się nie wyświetla, dlaczego ?
tomek_
rozumiem że prubujesz je wyświetlić w pliku widoku?

jeśli tak to czy masz w kontrolerze coś takiego

Kod
$this->view->przestrzennazw1 = $przestrzennazw1;


i co Ci pokazuje jak w kontrolerze dasz 

Kod
ZEND_DEBUG::dump($przestrzennazw1);



// lub od razu całą tablice sesji 

ZEND_DEBUG::dump($_SESSION,'tablica SESSION: <br />');
nieraczek
W końcu udało mi się zrobić i działa - tylko nie wiem czy to jest całkowicie poprawne.

W kontrolerze odpowiedzialnym za logowanie zrobiłem tak:
  1. <?php
  2. class LoginController extends Zend_Controller_Action
  3. {
  4. public function zalogujAction()
  5. {
  6.  
  7. ......................................................
  8.  
  9. $login=$this->getRequest()->getPost('login');
  10. $uzytkownicyTabela = new UzytkownicyTable();
  11. $uzytkownik = $uzytkownicyTabela->znajdz($login);
  12.  
  13. $osoba = new Zend_Session_Namespace('logowanie');
  14.  
  15. foreach($uzytkownik as $wiersz):
  16. $osoba->id_uzytkownika = $wiersz['id_uzytkownika'];
  17. $osoba->imie = $wiersz['imie'];
  18. endforeach;
  19.  
  20. ...................................................
  21.  
  22. }
  23.  
  24. }
  25. ?>




W innym kontrolerze "kontroler1" do którego akcji-stron mają dostęp tylko zalogowani użytkownicy chcę wykorzystać wartości zmiennych sesyjnych (utworzonych w kontrolerze odpowiedzialnym za logowanie LoginController). W akcji tego kontrolera potrzebuję wartości zmiennej sesyjnej 'id_uzytkownika' więc robi to tak jak niżej tylko zastanawia mnie, że znowu muszę pisać $osoba = new Zend_Session_Namespace('logowanie'); tak jakbym znów tworzył nową przestrzeń nazw, która już przecież istnieje w kontrolerze logowania, ale jak tego nie zrobię to nie bedę mógł pobrać wartości zmiennej sesyjnej. I to działa, ale może jednak nalezy to robić jakoś inaczej questionmark.gif

  1. <?php
  2. class Kontroler1Controller extends Zend_Controller_Action
  3. {
  4. public function akcja1Action()
  5.    {
  6.        $osoba = new Zend_Session_Namespace('logowanie');
  7.  
  8.        $zmienna = $osoba->id_uzytkownika;
  9.        .....................................................
  10.    
  11. }
  12. }
  13. ?>



Tak samo na stronie "akcja1.phtml" jak chcę wyświetlić wartość zmiennej sesyjnej 'imie' to najpierw muszę napisać: $osoba = new Zend_Session_Namespace('logowanie');:
  1. <?
  2. $osoba = new Zend_Session_Namespace('logowanie');
  3.  
  4. echo $osoba->imie;
  5.  
  6. ?>




Czy to się na pewno tak poprawnie robi ?
tomek_
jeśli chcesz kożystać z Zend_Session to poprawnie to robisz 

a jeśli Ci taki zapis nie odpowiada możesz to wyświetlić w taki sposób

Kod
<?
echo $_SESSION["logowanie"]["imie"];
?>
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.