我可以在Laravel 5 Session中保存对象、对象集合吗?

9

在Laravel 5中,是否可以将PHP对象和对象集合保存在会话中?

我尝试过,但是出现了错误。

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

}

你试过使用serialize($obj)吗?可能不会起作用,但无论如何。 - Nerijus Masikonis
我一直在尝试,但是它不起作用,然后我得到了“序列化闭包”错误。 - fefe
5
我成功地将对象和集合保存在Laravel的会话中,没有出现任何问题。我会怀疑你可能在某个地方使用了"$this",并且实际上获得了一些你不想要的东西。 - Lucha Laura Hardie
1个回答

1
你可以始终存储所尝试存储对象的JSON表示。
但是,我听说通常不建议在会话中存储大型内容,有没有其他方式可以通过存储其他内容来管理?如果您正在存储来自数据库的对象,则可以存储ID并使用查询恢复对象。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接