Laravel重定向回with()消息


158

当出现致命错误时,我试图通过消息重定向到上一页。

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

在视图中尝试使用

Sessions::get('msg')

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


1
修正错别字Session s,并use在需要的地方添加。除了它-应该工作。
Yevgeniy Afanasyev

Answers:


234

尝试

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

然后在您的视图中调用此

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

8
这样有效,多么酷。但是,为什么不进行此项工作, return Redirect::back()->with('msg', 'The Message'); 如何在此处获取“ msg”呢?
Mudit Tuli 2013年

您是否尝试过查看消息是否存在?Session::has('msg')
giannis christofakis 2013年

是的Session::has('msg'),并且“ msg”不存在。
Mudit Tuli 2013年

2
@giannischristofakis确实看起来像。我不知道9月那个寒冷的多雾的早晨我在抽什么烟。
StackOverflowed 2015年

7
对于5.4withErrors('some error')-因此需要是字符串而不是数组。
2017年

127

Laravel 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

7
数组到字符串的转换:(
Yevgeniy Afanasyev

留下评论作为编辑:如果给出错误:数组到字符串转换,则控制器中的 一个小问题return redirect()->back()->with('success', 'your message here');
迈克尔

@Michael如果是什么意思?它肯定会返回一个数组!
安德鲁·萨维奇克

@AndrewSavetchuk-这不是我的评论。当另一个SO用户应该在此处留下评论或创建自己的答案时,他已经编辑了答案。
迈克尔

@Michael,我们应该以正确的方式编辑答案,因为如果您运行该代码,它将无法正常工作。
安德鲁·萨维奇克

62

替代方法是

控制者

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

22

在Laravel 5.4中,以下对我有用:

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

你好 可接受的答案用于Laravel 4(请参阅问题标签),withErrors()答案中方法的参数是一个包含两个元素的数组:['msg', 'The Message']。有关可接受的参数,请参见api:laravel.com/api/4.2/Illuminate/Http/…–
haakym

在我的答案中,要在Laravel 5.4中使用,该withErrors()方法的参数是一个数组,其中一个元素是一key => value对,其中值是一个数组。5.4 API:laravel.com/api/5.4/Illuminate/Http/…–
haakym

13

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

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

应该:

Session::get('msg')

我认为,现在它应该工作,对我有用。


8

只需设置即显消息并重定向到控制器功能即可。

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

然后,您可以在刀片视图文件中获取该消息。

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

我认为{!! Session::get("msg", '') !!}应该足够了。get()已经检查密钥是否存在,否则返回默认值。
Emile Bergeron

8

在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

6

在laravel 5.8中,您可以执行以下操作:

return redirect()->back()->withErrors(['name' => 'The name is required']);

并在刀片中:

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

4

我不再为laravel编写自己的代码,而是使用Laracasts软件包为您处理所有事务。它真的很容易使用,并且可以保持代码干净。甚至有一个涵盖如何使用它的拉播。所有您需要做的:

通过Composer拉入包装。

"require": {
  "laracasts/flash": "~1.0"
}

将服务提供商包含在app / config / app.php中。

'providers' => [
  'Laracasts\Flash\FlashServiceProvider'
];

在底部的同一文件中添加外观别名:

'aliases' => [
  'Flash' => 'Laracasts\Flash\Flash'
];

将HTML拉入视图:

@include('flash::message') 

消息右侧有一个关闭按钮。这依赖于jQuery,因此请确保在引导程序之前添加了jQuery。

可选更改:

如果您不使用引导程序,或者想跳过包含Flash消息并自己编写代码,请执行以下操作:

@if (Session::has('flash_notification.message'))
  <div class="{{ Session::get('flash_notification.level') }}">
    {{ Session::get('flash_notification.message') }}
  </div>
@endif

如果您想查看引入的HTML @include('flash::message'),可以在中找到它vendor/laracasts/flash/src/views/message.blade.php

如果需要修改局部变量,请执行以下操作:

php artisan view:publish laracasts/flash

这两个软件包视图现在将位于“ app / views / packages / laracasts / flash /”目录中。


4

在控制器中

例如

return redirect('login')->with('message',$message);

刀片文件中 的消息将存储在会话中,而不是变量中。

例如

@if(session('message'))
{{ session('message') }}
@endif

3

对于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

2

我遇到了同样的问题,并且有效。

控制者

return Redirect::back()->withInput()->withErrors(array('user_name' => $message));

视图

<div>{{{ $errors->first('user_name') }}}</div>

2

对于laravel 5.6。*

在尝试使用Laravel 5.6。*中提供的一些答案时,很明显,我将在此处发布一些改进,以使那些无法使用其余答案找到解决方案的人更轻松。

第1步:

转到您的控制器文件,并将其添加到课程之前:

use Illuminate\Support\Facades\Redirect;

步骤2:将其添加到您要返回重定向的位置。

 return Redirect()->back()->with(['message' => 'The Message']);

步骤3:转到刀片文件并按以下步骤进行编辑

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

然后测试,稍后再感谢我。

这应该适用于laravel 5.6。*以及可能的5.7。*


1

对于Laravel 3

只是@giannis christofakis的答案;对于使用Laravel 3的任何人替换

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

与:

return Redirect::back()->with_errors(['msg', 'The Message']);

1

Laravel 5.6。*

控制者

if(true) {
   $msg = [
        'message' => 'Some Message!',
       ];

   return redirect()->route('home')->with($msg);
} else {
  $msg = [
       'error' => 'Some error!',
  ];
  return redirect()->route('welcome')->with($msg);
}

刀片模板

  @if (Session::has('message'))
       <div class="alert alert-success" role="alert">
           {{Session::get('message')}}
       </div>
  @elseif (Session::has('error'))
       <div class="alert alert-warning" role="alert">
           {{Session::get('error')}}
       </div>
  @endif

恩约


0

当我尝试重定向为时收到此消息:

public function validateLogin(LoginRequest $request){
    //

    return redirect()->route('sesion.iniciar')
            ->withErrors($request)
            ->withInput();

正确的方法是:

public function validateLogin(LoginRequest $request){
    //

    return redirect()->route('sesion.iniciar')
            ->withErrors($request->messages())
            ->withInput();

0

Laravel 5.8

控制者

return back()->with('error', 'Incorrect username or password.');

  @if (Session::has('error'))
       <div class="alert alert-warning" role="alert">
           {{Session::get('error')}}
       </div>
  @endif
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.