2015-03-24 16 views
7

Có thể lưu các đối tượng php, bộ sưu tập đối tượng trong laravel 5 Session không?Tôi có thể lưu các đối tượng, bộ sưu tập đối tượng trong một phiên Laravel 5 không?

Tôi đã cố gắng nhưng tôi nhận được lỗi về vấn đề này

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

Bạn đã thử serialize ($ obj) chưa? Nó có lẽ sẽ không hoạt động nhưng dù sao đi nữa. –

+0

Tôi đã cố gắng sẽ không hoạt động hơn tôi nhận được lỗi Serialize Closure – fefe

+3

Tôi đã lưu thành công các đối tượng và bộ sưu tập trong Laravel vào phiên mà không có vấn đề. Tôi sẽ nghi ngờ rằng có lẽ bạn đang sử dụng '$ this' ở đâu đó và thực sự nhận được một cái gì đó bạn không có ý định. –

Trả lời

1

Bạn luôn có thể lưu trữ các đại diện JSON của đối tượng bạn đã cố gắng để lưu trữ.

Tuy nhiên, tôi đã nghe nói chung là một ý tưởng hay là không lưu trữ những thứ lớn trong Phiên, có cách nào bạn có thể quản lý bằng cách lưu trữ nội dung khác không? Nếu bạn đang lưu trữ một đối tượng từ DB, bạn có thể lưu trữ Id và khôi phục đối tượng bằng một truy vấn.

+0

Có tốt hơn khi truy vấn cơ sở dữ liệu nhiều lần (cho mỗi lần làm mới trang) so với lưu trữ kết quả (thấp% để thay đổi) trong một phiên không? – JCarlos

Các vấn đề liên quan