【问题标题】:Laravel 5.2 redirect back with success messageLaravel 5.2 使用成功消息重定向回来
【发布时间】:2016-09-19 11:01:05
【问题描述】:

我正在尝试将成功消息返回到我在 laravel 上的主页。

return redirect()->back()->withSuccess('IT WORKS!');

由于某种原因,变量 $success 在运行此代码后没有得到任何值。

我用来显示成功消息的代码:

@if (!empty($success))
    <h1>{{$success}}</h1>
@endif

我已将主页和时事通讯页面添加到 routes.php 中的 web 中间件组,如下所示:

Route::group(['middleware' => 'web'], function () {
    Route::auth();

    Route::get('/', function () {
        return view('home');
    });

    Route::post('/newsletter/subscribe','NewsletterController@subscribe');
});

有人知道为什么这似乎不起作用吗?

【问题讨论】:

    标签: php laravel laravel-5.2


    【解决方案1】:

    您应该从routes.php 中删除web 中间件。手动添加web 中间件会导致session and request related problems in Laravel 5.2.27 and higher

    如果没有帮助(不过,请保持 routes.php 没有网络中间件),您可以尝试一些不同的方法:

    return redirect()->back()->with('message', 'IT WORKS!');
    

    如果存在则显示消息:

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

    【讨论】:

    • 很高兴知道它不再需要了。但是在从我的 routes.php 中删除 Route::group(['middleware' =&gt; 'web'], function () { 之后,$success 变量似乎仍然是空的,所以这似乎不是问题所在。
    • 也不起作用它似乎没有通过它保持空的消息传递。
    • 检查 Laravel 是否在 storage\framework\sessions 创建会话文件。或者,如果您使用数据库,它会将数据添加到sessions 表中)。
    • 是的,它会将数据添加到storage\framework\sessions,这样似乎可以工作
    • 我和我的朋友再次查看了您的代码,我对您的上一个解决方案做错了,它现在可以工作了 :-)
    【解决方案2】:

    你可以用这个:

    return redirect()->back()->withSuccess('IT WORKS!');
    

    并在您的视图中使用它:

    @if(session('success'))
        <h1>{{session('success')}}</h1>
    @endif
    

    【讨论】:

    • 使用这个方法,会话变量是保持持久还是只保持一次?
    • @AmitShah 看看这个链接:laravel.com/docs/5.7/…
    【解决方案3】:

    控制器:

    return redirect()->route('subscriptions.index')->withSuccess(['Success Message here!']);
    

    刀片

    @if (session()->has('success'))
    <div class="alert alert-success">
        @if(is_array(session('success')))
            <ul>
                @foreach (session('success') as $message)
                    <li>{{ $message }}</li>
                @endforeach
            </ul>
        @else
            {{ session('success') }}
        @endif
    </div>
    @endif
    

    您始终可以将此部分保存为单独的刀片文件并轻松包含它。 例如:

    <div class="row">
            <div class="col-md-6">
                @include('admin.system.success')
                <div class="box box-widget">
    

    【讨论】:

    • 这是最好的答案,因为它是唯一将成功消息视为数组的答案,因此可以一次显示多个成功消息。
    【解决方案4】:

    您可以简单地使用back() 函数进行重定向,无需使用redirect()-&gt;back(),请确保您使用的是5.2 或高于5.2 的版本。

    您可以将您的代码替换为以下代码。

    return back()->with('message', 'WORKS!');
    

    在视图文件中替换下面的代码。

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

    更多详情可以阅读here

    back() 只是一个辅助函数。它和redirect()-&gt;back()做同样的事情

    【讨论】:

      【解决方案5】:

      一种方法是在会话中发送消息,如下所示:

      控制器:

      return redirect()->back()->with('success', 'IT WORKS!');
      

      查看

      @if (session()->has('success'))
          <h1>{{ session('success') }}</h1>
      @endif
      

      其他方法就是创建会话并将文本直接放在视图中:

      控制器

      return redirect()->back()->with('success', true);
      

      查看

      @if (session()->has('success'))
          <h1>IT WORKS!</h1>
      @endif
      

      您可以在此处查看完整文档:Redirecting With Flashed Session Data

      希望对你有帮助,谢谢。

      【讨论】:

        【解决方案6】:

        以上所有内容都正确,但试试这个直行:

        {{session()-&gt;has('message') ? session()-&gt;get('message') : ''}}

        【讨论】:

          【解决方案7】:

          在控制器中

          return redirect()->route('company')->with('update', 'Content has been updated successfully!');
          

          考虑中

          @if (session('update'))
            <div class="alert alert-success alert-dismissable custom-success-box" style="margin: 15px;">
               <a href="#" class="close" data-dismiss="alert" aria-label="close">&times;</a>
               <strong> {{ session('update') }} </strong>
            </div>
          @endif
          

          【讨论】:

            【解决方案8】:

            您可以使用 laravel MessageBag 将我们自己的消息添加到现有消息中。

            要使用 MessageBag,您需要使用:

            use Illuminate\Support\MessageBag;
            

            在控制器中:

            MessageBag $message_bag
            
            $message_bag->add('message', trans('auth.confirmation-success'));
            
            return redirect('login')->withSuccess($message_bag);
            

            希望对某人有所帮助。

            • 阿迪

            【讨论】:

            • 但是……如何在视图中使用呢?
            【解决方案9】:

            在控制器中:

             `return redirect()->route('car.index')->withSuccess('Bein ajoute')`;
            

            考虑中

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

            【讨论】:

              猜你喜欢
              • 2016-10-09
              • 2016-07-15
              • 2017-08-08
              • 2013-11-19
              • 2018-02-16
              • 1970-01-01
              • 2023-03-03
              • 1970-01-01
              • 1970-01-01
              相关资源
              最近更新 更多