2015-04-15 89 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語句下運行條件有所不同。 –