从模板调用Cakephp3 Flash消息

时间:2016-04-26 15:24:03

标签: cakephp cakephp-3.0

我正在使用cakephp3处理Ajax请求,并且需要在成功时向用户显示flash成功消息。

以下是我正在做的事情:

⎣x/y⎦

其他一切工作正常,但是flash消息。如何在视图中显示cakephp3的flash消息?

以下是我如何通过ajax从控制器获取请求:

$('#validate-btn').on('click', function () {
        $('#validate-btn').text("Validating...");
        $('#results-form').submit();
        if (ids.length !== 0) {
            $.ajax({
                type: "POST",
                url: "<?php echo Cake\Routing\Router::url(array("controller" => "results", "action" => "validateSelected"));?>" + "/" + JSON.stringify(ids),
                cache: false,
                success: function (data) {
                    $('#validate-btn').text("Validate Selected");
                    <?php $this->Flash->success("Validated"); ?>
                },
                error: function (data) {
                    alert('s');
                }
            });
        }
    });

3 个答案:

答案 0 :(得分:0)

Flash消息不适用于json响应。

你应该做下面的事。

在您的控制器中:

sqlquote()

在_serialize中调用set可以创建一个json响应,而无需为此控制器方法创建相应的json模板。

在你的js文件中

$result = $query->execute();
if ($this->request->is('ajax')) {
    $this->set(compact('result'));
    $this->set('_serialize', 'result');
    return;
}

答案 1 :(得分:0)

您可以执行以下操作:

在控制器中::

   if ($this->XYZ->save($eventEntity)) {
            $this->Flash->success(['message' => __('Updated the Event'), 'title' => __('Success')]);
        } else {
            $this->Flash->error(__('An Error occurred while updating the event. Please try again'));
        }

在Ajax中::

     $.ajax({
                         type: "POST",
                                            async: true,
                                            url: $("#xyz").attr("data-confirm"),
                                            dataType: "json",
                                            success: function (response) {
                                                 toastr.success(response.message, response.title);
                                            },
                                            error: function (data) {
                                                toastr.error(data.message, data.title);
                                            }
                                        });

我正在使用烤面包机插件,但是您可以使用任何选择的闪光灯。该消息将显示在您的response.message

答案 2 :(得分:0)

另一种方法是在控制器和layout / ajax.ctp中设置布局“ ajax”: 添加echo $this->Flash->render();