2017-06-04 45 views
1

我正在使用laravel 5.4。在控制器的方法中,我在会话中设置了一个值。如果我在设置会话之后立即拨打dd()dd()会显示我刚刚设置的会话的所有会话。但是,如果我从另一种方法获取会话,会话不可用。如果我从会话设置器方法中删除dd(),我正确地获取会话。如果使用dd方法,Laravel 5.4会话未被设置

我的代码如下:

public class TestController{ 
    public function setSession(){ 
    session(['test_key' => 'test_value']);//setting up the session 
    dd(session()->all());//getting the session properly here 
    } 

    public function showSession(){ 
    dd(session()->all());//Here we are not getting the session 
    } 
} 

如果我们去掉dd()setSession()会议能够正常工作。这是Laravel的错误还是故意的。我很想知道这个事实的根本原因。由于

回答

3

dd()意味着“转储&模”,并在其执行,并立即终止框架,不允许Laravel以正确完成请求,并保存会话使用die()。你可以使用dump()来显示dd()之类的信息,并且不要关闭内核之后。

+0

在'dd()'调用之前'session()'方法是否已经将值保存到了会话中?还需要什么操作来完成它的实现。 – Imran

+0

不,Laravel首先收集所有需要写入会话的数据,并在用户代码执行后保存它们。但是,您可以强制会话立即保存:'session(['key'=>'value']); session() - > save();' – Anton

+0

原因是会话数据是通过'Terminable Middleware'写入的。这就是@安顿所描述的。 – Ohgodwhy

1

删除此行dd(session()->all())

从setSession(),并再次尝试。

+0

我知道它删除此行后工作。但我的问题是为什么这不起作用?我只是在这里倾倒会议的权利? – Imran

+0

是的,你是对的。 dd意味着你已经知道的转储和死亡。 ): –