2015-05-01 120 views
2

我想將我的變量$ username的值從我的控制器發送到我的視圖。如何從控制器發送變量到Laravel中的視圖?


控制器

我送過來在我的控制器的這樣的底部:

return Redirect::to('/') 
    ->with('error','Username/Password Wrong or account has not been activated !') 
    ->withInput(Request::except('password')) 
    ->with('username', $username) 
    ->withErrors($validator); 

注意:$用戶名


查看

某處在我的主頁,/

網址我試圖把它打印出來{{ $username or 'Nothing' }}


結果

它保持打印Nothing


問題

這似乎是我的$username變量永遠不會被髮送? 有人可以指出我在這裏做錯了嗎?

+0

問題可能是'$ username'爲空或未定義。嘗試將'$ username'改爲'「一些字符串」' - 我想你會發現那些作品。如果是這樣,那意味着你的'$ username'變量不包含你認爲它的作用。 – Kryten

+0

我知道它是空的,我發送之前已經測試了我的$ username變量,並且它包含一些字符串。我只想知道爲什麼它永遠不會發送。 – ihue

+1

其實,我只是意識到你正在做一個重定向,而不是渲染視圖。我的答案將在一秒鐘之內。 – Kryten

回答

5

重定向很重要。從the documentation on redirects

重定向到一個新的URL和閃爍的數據到會話通常是在同一時間完成。因此,爲了方便起見,您可以創建一個RedirectResponse實例並將數據閃存到單個方法鏈中的會話:

return('user/login') - > with('message','Login Failed');

問題是,重定向是由客戶端的瀏覽器處理的。實際上,服務器響應第一個請求,「好的,得到了​​你的請求,現在轉到這個URL」。然後客戶端向另一個URL發送請求。因此,Laravel不能將值傳遞到下一頁進行渲染,因爲客戶端正在提出新的請求。那麼with()子句正在做什麼是將數據閃爍到會話。因此,當您呈現新頁面時,您需要從會話中檢索它。

那麼你真正想要做的是這樣的:

重定向:

return Redirect::to("route1")->with("username", $username); 

,當新的頁面加載(可能在不同的路線):

return View::make("template")->with("username", Session::get("username")); 
+0

這正是我所做的:'返回Redirect ::到(「route1」) - >(「用戶名」,$用戶名); ' – ihue

+0

是的,但那不是頁面被渲染的地方。您將用戶重定向到其他地方。 – Kryten

+0

我將我的用戶重定向到了url:'/',並且當我在我的主頁url:'/'時嘗試'{{$ username或'Nothing'}}''。 – ihue

0

當你正在發送重定向,它存儲在臨時會話中,你可以檢查會話在視圖中

@if(Session::has('username')) 

{!!Session::get('username')!!} 
// if you want to keep username session for next view 
{!!Session::keep(['username'])!!} 
@else 
Nothing 
@endif 

閱讀文檔Doc http://laravel.com/docs/5.0/session

相關問題