在Laravel 5中闪烁反馈消息

时间:2016-09-15 13:53:18

标签: javascript php ajax laravel laravel-5

我想快速反馈消息,例如“条目已成功创建”“您没有足够的权限来访问此项目”

我希望避免将这些消息直接嵌入到视图中,因为它们可以重新显示,例如,当用户使用浏览器导航回上一页时。

要解决这个问题,我有一个 javascript函数,其行为如下:

(showFlashMessage(){
    // 1. make an ajax request
    // 2. retrieve a flash message (if any)
    // 3. display the message
})();

这样,解决了闪存消息再现的问题。但是,在发出请求时,flash消息已经消失。我该如何解决这个问题?

2 个答案:

答案 0 :(得分:0)

如果您想在服务器端解决问题,您可以像这样使用会话外观:

在您的控制器中:

function create() {
    if(Gate::allows('createAccess')) {
        Session::flash('error', 'You don't have enough permissions to access this item!');

        return redirect()->back();
    }

    // Create the model or perform any other logic

    Session::flash('success', 'An entity has been created successfully!');

    return view('entities.show');
}

然后你可以有一个部分命名的message.blade.php,它包含在你的entities.show视图中:

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

如果您想在客户端解决问题,您可以在请求成功完成后在成功回调中调用您的消息功能(例如甜蜜警报消息):

function showMessage() {
    $.ajax({
        url: 'your-url',
        data: {
            // Your data here
        },
        success: function() {
            // Show success message
        },
        error: function() {
            // Show error message
        }
    });
}

答案 1 :(得分:0)

我建议保持简单,并在控制器中调用内置的flash()方法:

flash()->error('We encountered an error whilst doing something');
return redirect('path') //action(), back(), etc;

根据我的理解,Laravel会在会话中处理这些Flash消息,并且在删除之前它们仅保留用于下一页面视图。如果要重用特定消息或消息类型和内容的组合,请考虑将其存储在数据库表或helper.php

另一个选择是拉入Laracasts/Flash/Flash