我正在学习Laravel 5.4。我正在按照初学者的教程(我们使用相同的Laravel版本)。
在视频教程中,该人在控制器中使用以下代码行:
return redirect()->route('posts.index')->with('error','Unauthorised!');
我们在视图中都有以下内容:
@if(count($errors))
@foreach($errors->all() as $error)
<div class="alert alert-danger">
{{ $error }}
</div>
@endforeach
@endif
代码对于屏幕上的导师来说非常好,但它不适合我 - 它重定向但不会传递错误。
我在我的控制器中使用了以下修改过的代码,它起作用了:
return redirect()->route('posts.index')->withErrors(['error'=>'Unauthorised!']);
为了让我学习,我需要知道为什么原始代码适合他 - 但不是我?就像我之前说的那样,我们都使用相同版本的Laravel。
任何人都可以解释原因吗?
答案 0 :(得分:1)
我还没有看过这个视频,所以不能说出为什么他会这么做。
1
return redirect()->route('posts.index')->with('error','Unauthorised!');
您使用名为error的变量重定向到posts.index,并检查一个名为errors的变量,这样您就可以这样做了
@if(count($error))
<div class="alert alert-danger">
{{ $error }}
</div>
@endif
2。 您可以像其他示例一样支持多个错误,您可以像
那样执行此操作return redirect()->route('posts.index')->withErrors(['Unauthorised!', 'error_2', 'error_3', 'etc']);
然后你可以像在你自己的第一个例子中那样循环遍历它们(你不需要数组中的键,但是如果你觉得它可以拥有它们)
@if(count($errors))
@foreach($errors->all() as $error)
<div class="alert alert-danger">
{{ $error }}
</div>
@endforeach
@endif
3。 第三种选择也是使用flash会话,这是一个仅适用于下一个请求的会话
比你能做的
return redirect()->route('posts.index')->session()->flash('error', 'Unauthorised!');
并在您的观看中
@if(Session::has('error'))
<div class="alert alert-danger">
{{ Session::get('error') }}
</div>
@endif
我个人更喜欢,因为它让我可以选择在我的&#34;主布局文件&#34;中包含if语句,它将显示在所有包含的页面上。