Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [ZendFramework][ZF2] Dane z sesji (container) widoczne dla całego modułu
netvalue
post 19.09.2014, 08:05:47
Post #1





Grupa: Zarejestrowani
Postów: 199
Pomógł: 2
Dołączył: 9.06.2008

Ostrzeżenie: (0%)
-----


Witam,

W zf2 mam dwa moduły:

1. Lpp - odpowiada za autoryzację i zapisuje dane sesji uzywając Zend\Session\Container
2. App - cała aplikacja dostępna po zalogowaniu

teraz w module App mam akcje

  1. public function indexAction() {
  2. $user_session = new Container('mysession');
  3. echo $user_session->login;
  4.  
  5. return new ViewModel();
  6. }


Teraz jak najlepiej zrobić żęby wartość $user_session->login mozna bylo wywoływać w każdej akcji modułu App bez każdorazowego tworzenia obiektu Container w każdej akcji..
Drugie pytanie to jak najlepiej przekazywać wartość $user_session->login do layoutu widoku. Chodzi mi to to że potrzebuje mieć to wartość w widoku jako "Zalogowany jest xxx"
Go to the top of the page
+Quote Post
memory
post 19.09.2014, 08:37:57
Post #2





Grupa: Zarejestrowani
Postów: 616
Pomógł: 84
Dołączył: 29.11.2006
Skąd: bełchatów

Ostrzeżenie: (0%)
-----


Utwórz "głowny kontroler" np

  1. AdminController extends AbstractController
  2. {
  3.  
  4. public function getSessionLogin(){}
  5. }


Następnie w każdym kontrolerze użyj dziedziczenia po AdminController

  1. AlbumController extends AdminController{
  2.  
  3. function indexAction(){
  4. return $this->getSessionLogin();
  5. }
Go to the top of the page
+Quote Post
RiE
post 19.09.2014, 12:05:52
Post #3





Grupa: Zarejestrowani
Postów: 97
Pomógł: 45
Dołączył: 5.05.2010

Ostrzeżenie: (0%)
-----


Pierwsza sprawa jeżeli musisz robić to w ten sposób to znaczy że coś źle robisz bo Zend Framework 2 posiada zarówno controller plugin jak i view helper który przechowuje dane zalogowanego użytkownika

Druga sprawa to rozwiązanie z dziedziczonym controllerem tak na dobrą sprawę niczego nie rozwiązuje.

Ja proponowałbym skorzystać z ServiceManagera:

W pliku Module.php

  1. 'service_manager' => array(
  2. 'factories' => array(
  3. 'my-session' => function($sm) {
  4. $user_session = new Container('mysession');
  5. return $user_session;
  6. },
  7.  
  8. ),
  9. ),



  1. public function onBootstrap($e) {
  2.  
  3. $serviceManager = $e->getApplication()->getServiceManager();
  4. $viewModel = $e->getApplication()->getMvcEvent()->getViewModel();
  5.  
  6. $session = $serviceManager->get('my-session');
  7.  
  8. $viewModel->login = $session
  9.  
  10. }


I teraz w widoku możesz

  1. <?php echo $this->login; ?>
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
1 Użytkowników czyta ten temat (1 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Wersja Lo-Fi Aktualny czas: 15.07.2025 - 02:44