在同一页面上提交表单后如何输出消息?

时间:2019-04-05 13:40:27

标签: laravel octobercms

当用户汇总表格时,我需要在同一页面上为他输出消息。

当我提交表单时,页面刷新,处理程序触发(php函数),一些POST数据插入到数据库中,我设置了$this['success'] = 1,然后与Twig一起检查:

{% if success %}
  here is many tags with information and a message
{% else %}
   here is a form
{% endif %}

但是如果我按F5键,则重新提交表单,则插入查询将再次执行。

使用AJAX进行此请求不是真正的选择。

2 个答案:

答案 0 :(得分:1)

有很多方法可以回答这个问题(使用缓存,数据库,cookie,会话)。使用Session Flashing真的很容易,在这种情况下,我将向您展示如何使用Returning a redirect with flash data.

  1. 启动CMS页面
  2. 放置HTML表单代码:*请注意{{ something }}对于提交表单后显示我们的响应很重要。该请求不使用AJAX。

    {{ something }}
    {{ form_open({ request: 'onSubmit', class: 'row', autocomplete: 'off' }) }}
    {{ form_input('text', 'something', '', { class: 'input padding' }) }}
    {{ form_submit('Submit', { class: 'button padding' } ) }}
    {{ form_close() }}
    
  3. PHP代码:

    function onStart() {
    $something = Session::get('something');
    $this['something'] = $something; 
    }
    
    function onSubmit() {
    $something = Input::get('something');
    return Redirect::refresh()->with('something', $something);
    }
    
  4. 提交表单后测试并享受一种创建消息的方法。

Photo of a form for testing Photo of the output message

答案 1 :(得分:0)

如果您使用的是 laravel,那么您可以轻松实现来处理此功能

在查看文件中,您需要编写此代码,它将在您显示表单的同一页面上显示消息。

file.blade.php 文件

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

FormController.php

    public function addUser(Request $request){
     User::create([
                'name' => $request->name,
                'email' => $request->email,
                'gender' => $request->gender,
                'contact' => $request->contact,
                    .....]);
      //below code help to display the message that you want on same page whereuser entered data
      return back()->with('success', 'Thanks you for adding!!');
}

    

return back()->with('success', '感谢您的加入!!'); 将此代码用于 Laravel 项目以在同一页面上显示消息