从控制器发送变量以通过路由查看



我想将数据从登录控制器发送到routes/web.php。

在我的登录控制器中.php我有

return redirect()
->intended('/dashboard')
->with([
'name'=>'Joe Steel',
'address'=>'Blk 4, Bryton street',
'gender'=>'male',
]);//this is the data I want to send

在我的路线/网络中.php我有

Route::get('/dashboard', function(){
//from session
$names = Session::get('name');//extract name from session
$address = Session::get('address');//extract name from session

return View::make('view/directory/dashboard', [
'name'=>$names, 
'address'=>$address]);
//load web view , 
//send name which would be displayed in 
//dashboard.blade.php {{$name}} and {{$address}}
});

在我的仪表板中.php我有

{{$name}} and {{$address}}

这不会产生任何输出。 即它们要出现的位置是空的

当我不给 View::make() 任何变量标识符时,例如 View::make('dashboard',[$names,$address]) 它产生错误 未定义的变量:名称(查看:/laravel/installed/directory.php)

所以我不知道 route/web.php 是否从控制器接收任何东西,我也对如何通过数组将其传递给视图感到困惑。

请问发生这种情况的原因可能是什么

更新

我注意到会话没有从我的控制器传递,我不知道这可能是什么原因。我缺少什么吗?

with() 方法接受键数组作为第一个值,将值本身作为第二个值,所以请尝试 像这样用这样的方法链接,而不是调用它一次。

return redirect()
->intended('/dashboard')
->with('name', 'Joe Steel')
->with('address', 'Blk 4, Bryton street')
->with('gender', 'male');

请尝试将错误值添加到会话数据提取中。

$names = Session::get('name', 'default name');//extract name from session
$address = Session::get('address', 'default address');//extract name from session

并使用相关的视图路径,而不是实际的项目根路径。

return view('directory.dashboard', [
'name'=>$names, 
'address'=>$address]);

在路径中使用 . 而不是/in from 资源文件夹。

另外,您可以使用身份验证外观,例如

Auth::user();

在他登录后获取您的用户数据。

您是直接访问路线/dashboard,还是在被引导后刷新页面?会话数据仅针对单个请求保留。因此,如果您的login成功并被重定向到/dashboard,数据将在session中可用。如果刷新页面或导航离开,则返回的数据将不再可用,因此不会显示。

更新

成功对user进行身份验证后,您将user重定向到具有使用with(...)添加的nameaddress数据的/dashboard路由。

然后,从session获取nameaddress数据,并将该数据传递到视图。nameaddress将在用户第一次访问/dashboard时在视图中可用,因为它是从您的route发送的,该从您的session获取数据。如果user转到另一个页面(例如/dashboard/users),然后返回到/dashboard,则nameaddress数据将不可用,因此不会显示。若要在user转到另一个页面并再次返回时显示nameaddress,需要设置nameaddress,或者仅使用Auth::user()->name;获取经过身份验证的用户的名称。

最新更新