首页 > 解决方案 > PHP Laravel 会话闪烁警报消息未显示

问题描述

在我laravel的应用程序中,如果用户想要订阅时事通讯,可以选中联系表单上的复选框。当复选框被选中并提交表单时,控制器中会出现一个检查,如果用户已经订阅,如果是这样,则应该出现一个闪烁警报/消息,其中包含“您已经订阅”之类的内容。现在,检查本身有效,但没有显示闪光/警报消息,我不知道为什么。

在我看来:

@if (\Session::has('success'))
    <div class="alert alert-success">
       <p>{{ \Session::get('success') }}</p>
    </div>
@endif
@if (\Session::has('failure'))
    <div class="alert alert-danger">
       <p>{{ \Session::get('failure') }}</p>
    </div>
@endif
 <div class="contact-form" id="contact">
     <form method="POST" action="{{ route('contact.store') }}">
     ...
     </form>
 </div>

在我的控制器中:

// when the checkbox is checked!

if (!empty(request()->newsletter)) {
    if (!Newsletter::isSubscribed(request()->email)) {
        Newsletter::subscribePending(request()->email);

        return redirect()->route('contact.create')->with('success', 'Thanks for subscribing!');

    } else {

        return redirect()->route('contact.create')->with('failure', 'You are already subscribed');

    }
}

有人可以帮我吗?

标签: phplaravel

解决方案


您似乎正在使用会话类,而不是 laravel 在服务容器上注入的会话助手。

如果您使用的是 Laravel 5.8,刀片中的会话是一个辅助函数,根据此处的文档:

https://laravel.com/docs/5.8/responses#redirecting-with-flashed-session-data

一个例子

Route::post('user/profile', function () {
    // Update the user's profile...

    return redirect('dashboard')->with('status', 'Profile updated!');
});

所以像这样在刀片中使用辅助函数:

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

注意:这仅在您使用页面提交时才有效。如果是 javascript 提交,您可能需要刷新页面才能显示警报。


推荐阅读