Laravel使用with()方法重定向并显示消息

225

在发生致命错误时,我正在尝试带有消息地重定向回上一页。

App::fatal(function($exception)
{
    return Redirect::back()->with('msg', 'The Message');
}

在尝试访问消息时

Sessions::get('msg')

但是什么都没有被渲染出来,我在这里做错了什么吗?


2
修正拼写错误 Sessions,并在需要的地方添加 use。除此之外 - 应该可以工作。 - Yevgeniy Afanasyev
25个回答

344

请试试

return Redirect::back()->withErrors(['msg' => 'The Message']);

在您的视图内调用此函数:

@if($errors->any())
<h4>{{$errors->first()}}</h4>
@endif

13
这个很好用。 但为什么这个不行呢? `return Redirect::back()->with('msg', 'The Message');`如何在这里获取 "msg" 呢? - M T
2
确认了一下 Session::has('msg'),'msg' 并不存在。 - M T
你尝试过使用不同的“key”或传递数组吗?还可以使用Session::put() - giannis christofakis
4
当然看起来是这样。我不知道自己在九月的那个寒雾晨曦中是怎么想的。 - StackOverflowed
12
针对5.4版本,withErrors('some error')需要将错误信息作为字符串而不是数组传递。 - senty
显示剩余6条评论

198

Laravel 5及以上版本

控制器(Controller)

 return redirect()->back()->with('success', 'your message,here');   

刀锋:

@if (\Session::has('success'))
    <div class="alert alert-success">
        <ul>
            <li>{!! \Session::get('success') !!}</li>
        </ul>
    </div>
@endif

7
数组转换为字符串 :( - Yevgeniy Afanasyev
@AndrewSavetchuk -- 这不是我的评论。另一个SO用户在他应该在这里留下评论或创建自己的答案时编辑了答案。 - Michael
我们有session()和cookie()助手可用于您的blade文件中,而不是Facades。我不知道为什么很多人不喜欢使用助手。 - Amir Hassan Azimi
1
这个在Laravel 9中有效。在控制器中,我使用了以下代码:return redirect()->back()->with('message', '数量约束失败');在重定向的位置的blade文件中,我添加了以下代码:@if(session()->has('message'))

{{session('message')}}

@endif
- Rajib
1
@Rajib 谢谢,我用了你的代码,完美地实现了我的需求。 - Vic Iyke
显示剩余5条评论

79

另一种方法是

控制器

use Session;
       
Session::flash('message', "Special message goes here");
return Redirect::back();

查看

@if (Session::has('message'))
   <div class="alert alert-info">{{ Session::get('message') }}</div>
@endif

28

在 Laravel 5.4 中,以下方法适用于我:

return back()->withErrors(['field_name' => ['Your custom message here.']]);

你好。被接受的答案适用于Laravel 4(请参见问题标签),答案中withErrors()方法的参数是一个包含两个元素的数组:['msg','The Message']。请参阅API以获取可接受的参数:https://laravel.com/api/4.2/Illuminate/Http/RedirectResponse.html#method_withErrors - haakym
在我的回答中,用于Laravel 5.4的withErrors()方法的参数是一个包含了一个key => value对的数组,其中value是一个数组。5.4的API文档:https://laravel.com/api/5.4/Illuminate/Http/RedirectResponse.html#method_withErrors - haakym

13

你有一个错误(拼写错误):

Sessions::get('msg')// an extra 's' on end
Session::get('msg')

我认为现在它应该可以工作了,对于我来说确实如此。


12

只需在您的控制器函数中设置闪存消息并重定向回到上一页。

    session()->flash('msg', 'Successfully done the operation.');
    return redirect()->back();

然后你可以在视图 blade 文件中获取消息。

   {!! Session::has('msg') ? Session::get("msg") : '' !!}

2
我认为 {!! Session::get("msg", '') !!} 就足够了。get() 已经检查了 key 是否存在,如果不存在则返回默认值。 - Emile Bergeron

11

在 Laravel 5.5 中:

return back()->withErrors($arrayWithErrors);
在使用Blade模板时的视图中:
@if($errors->has())
    <ul>
    @foreach ($errors->all() as $error)
        <li>{{ $error }}</li>
    @endforeach
    </ul>
@endif

2
$errors->has() 失败了,但 $errors->any() 运行良好。 - robspin

9

对于 Laravel 5.5+:

控制器:

return redirect()->back()->with('success', 'your message here');

刀片:

@if (Session::has('success'))
    <div class="alert alert-success">
        <ul>
            <li>{{ Session::get('success') }}</li>
        </ul>
    </div>
@endif

1
这在 Laravel 8 中对我有效。 - makoz

8
在 Laravel 5.8 中,你可以采取以下方法:
return redirect()->back()->withErrors(['name' => 'The name is required']);

在 Blade 模板引擎中:

@error('name')
<p>{{ $message }}</p>
@enderror

5
我知道这是一篇旧帖子,但这个回答可能会对某些人有所帮助。
在 Laravel 8.x 中,以下方法适用于我:您可以将错误返回到上一页或其他页面。
return Redirect::back()->withErrors(['password' => ['Invalid Username or Password']]);

这种方法同样有效:

return view('auth.login')->withErrors(['username' => ['Invalid Username or Password']]);

请确保返回的页面/视图有与withErrors方法中传递的第一个参数(在本例中为username或password)相对应的字段名称,并且您的视图中的@error指令引用相同的字段,如下所示。
@error('password') //or @error('username')
 <span class="invalid-feedback" role="alert">
   <strong>{{ $message }}</strong>
 </span>
@enderror 

例如:
希望这对某些人有所帮助。干杯。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接