如何从控制器向Laravel中的视图发送变量?

kyo*_*kyo 2 php laravel laravel-4 laravel-5

我想将我的变量$ username的值从我的控制器发送到我的视图.


调节器

我把它发送到我的控制器底部,如下所示:

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

注意:$ username


视图

在我的主页的某个地方有网址 /

我试着把它打印出来 {{ $username or 'Nothing' }}


结果

它继续印刷 Nothing


问题

似乎我的$username变量从未被发送过?有人可以指出我在这里做错了什么吗?

Kry*_*ten 5

重定向很重要.从重定向文档:

重定向到新URL并将数据闪烁到会话通常是同时完成的.因此,为方便起见,您可以在单个方法链中创建RedirectResponse实例并将数据刷新到会话:

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

问题是,重定向由客户端的浏览器处理.实际上,服务器响应第一个请求"Ok,得到了您的请求.现在转到另一个URL".然后客户端向另一个URL发出请求.因此,Laravel不能只将值传递到下一页进行渲染,因为客户端正在发出新请求.所以该with()子句正在做的是将数据闪存到会话中.因此,您需要在呈现新页面时从会话中检索它.

所以你真正想做的是:

重定向:

return Redirect::to("route1")->with("username", $username);
Run Code Online (Sandbox Code Playgroud)

当新页面加载时(可能在不同的路径上):

return View::make("template")->with("username", Session::get("username"));
Run Code Online (Sandbox Code Playgroud)