2015-04-15 46 views
3

当Laravel 4.2尝试在使用Laravel会话刷新某些数据的刀片中设置JS变量时,我遇到了Laravel 4.2的一些奇怪现象。这很简单,我不知道我已经错过了什么......Laravel会话变量在刀片@if

目标:在用户注册后触发一个Javascript网站浏览。 方法:将一个welcome_tour变量写入会话,然后在页面刷新时设置一个JS布尔值,然后在JS中开始浏览。

我的寄存器功能总结与会话设置:

Session::flash('welcome_tour', TRUE); 

而且我测试,它的回升,并在我的刀片以下正确设置JS变量:

<script> 
    @if(Session::has('welcome_tour')) 
     var welcome_tour = true; 
    @else 
     var welcome_tour = false; 
    @endif 
</script> 
{{ var_dump(Session::all()) }} 

的结果HTML中的JS代码段表示welcome_tour未找到:-(

<script> 
    var welcome_tour = false; 
</script> 

但是打印到由所述的var_dump屏幕会话细节表明它是正确设置:

array (size=4) 
    '_token' => string 'HHBowu6wdYlIKy4kFiWYwCe4lQRkFbG7jdNDlYXQ' (length=40) 
    'flash' => 
    array (size=2) 
     'old' => 
     array (size=1) 
      0 => string 'welcome_tour' (length=12) 
     'new' => 
     array (size=0) 
      empty 
    'login_82e5d2c56bdd0811318f0cf078b78bfc' => string '1137' (length=4) 
    'welcome_tour' => boolean true 

会话变量如何既可以是有和没有存在?

+0

如果您打开浏览器控制台并输入'welcome_tour',会发生什么情况?另外,当您在浏览器中查看页面源代码时,HTML中是否有'welcome_tour'? – Frank

+0

谢谢弗兰克。奇怪的是,控制台告诉我,welcome_tour被正确设置为true。我想这足以让我触发我的旅程,但这只是一个奇怪的事情,HTML源代码将它设置为false,但它在别的地方被神秘地设置为真。 – Fixspec

+0

你是否可以在多个地方设置'welcome_tour'的值?所以你正在看HTML源代码的错误部分? – lukasgeiter

回答

2

尝试使用类似的东西。

<script type="text/javascript"> 
<?php 
if(Session::has('welcome_tour')){ 
    echo "welcome_tour = true"; 
}else{ 
    echo "var welcome_tour = false"; 
} 
?> 
</script> 

并且还尝试dd(Session::has('welcome_tour'))以验证输出为条件。可能会话有方法返回false。

+1

谢谢Safoor,但这与我已经使用的代码有什么不同?您正在使用本地php'<?php'和'echo',并且我正在使用刀片式的'@ if'和'{{}}',但其他部分不一样吗? – Fixspec

+0

它只是在if语句下运行条件有所不同。 –