Noob Q:Laravel 5.4 - redirect() - > with()

时间:2017-08-23 10:19:42

标签: php laravel laravel-5.4

我正在学习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。

任何人都可以解释原因吗?

1 个答案:

答案 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语句,它将显示在所有包含的页面上。