Home » Php » php – Can I save Objects, Object Collections in a Laravel 5 Session?

php – Can I save Objects, Object Collections in a Laravel 5 Session?

Posted by: admin July 12, 2020 Leave a comment

Questions:

Is it possible to save php Objects, object collections in laravel 5 Session?

I was trying but I get error on this

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 );

}
How to&Answers:

You could always store the JSON representation of the object you tried to store.

However, I’ve heard it’s generally a good idea not to store large things in the Session, is there anyway you could manage by storing something else? If you are storing an object from the DB, you could store the Id and recover the object with a query.