2015-03-24 35 views
7

Czy można zapisać php Objects, kolekcje obiektów w laravel 5 Session?Czy mogę zapisać obiekty, kolekcje obiektów w sesji Laravel 5?

starałem, ale pojawia się błąd na tej

Serialization of 'Closure' is not allowed vendor/illuminate/session/Store.php line 255 

Session::put('my_php_object', $obj); 
Session::save(); 


public function onRun() 
{ 

    $this->addCss('assets/css/custom.css'); 
    $this->socialite_providers = $this->page['socialite_providers'] =$this->providersList(); 

    //check for provider param in url 
    if($provider = $this->param('provider')){ 

     $this->setSessionProvider($provider); 
     $this->provider = $provider; 
     $this->callback_url = preg_replace('~.*\K:(.*)~s','',Request::root().$this->page->url); 
     $this->request = $this->createRequest($provider); 


     Session::save(); 
     return $this->request->redirect(); 

    } 

    //Authorize user if Request has code 
    if(Request::has('code')){ 

     if(!$this->getSession()) 
      return; 

     //reuse save session 

    } 

} 

public function createRequest($provider) 
{ 
    $instance = Socialite::driver($provider); 
    $init = $this->injectCredentials($instance, $provider); 

    $this->setSession($init); 
    return $init; 
} 

public function injectCredentials($instance, $provider){ 
    $credential = $this->providerData($provider)->toArray(); 
    $instance = new $instance 
    (
     Request::instance(), 
     $credential['client_id'], 
     $credential['client_secret'], 
     $this->callback_url 
    ); 

    return $instance; 
} 

public function setSession($init) 
{ 
    if(Session::has('socialite_object')) 
     Session::forget('socialite_object'); 


    Session::put('socialite_object', $init); 

} 
+0

Czy próbowałeś serializować ($ obj)? Prawdopodobnie to nie zadziała, ale tak czy inaczej. –

+0

Próbowałem nie będzie działać, niż uzyskać błąd szeregowej zamknięcia – fefe

+3

Udało mi się zapisać obiekty i kolekcje w Laravel do sesji bez problemu. Byłbym podejrzliwy, że być może używasz "$ this" gdzieś i faktycznie dostajesz coś, czego nie zamierzasz. –

Odpowiedz

1

Można zawsze przechowywać reprezentacji JSON obiektu, który próbował do sklepu.

Słyszałem jednak, że na ogół dobrym pomysłem jest nie przechowywać dużych rzeczy w sesji, czy jest tak, że można zarządzać, przechowując coś innego? Jeśli przechowujesz obiekt z bazy danych, możesz zapisać identyfikator i odzyskać obiekt za pomocą zapytania.

+0

Czy lepiej jest przeszukiwać bazę danych kilka razy (dla każdego odświeżania strony) niż przechowywać wyniki (niska zmiana%) w sesji? – JCarlos