如何使用silverstripe中的成功消息重定向返回自定义html表单?

问题描述

我是 SilverStripe 的新成员。我想在 SilverStripe 中创建自定义 HTML 表单。

<form class="form-inline" $HelloForm.FormAttributes>

<p id="{$HelloForm.FormName}_success" class="message" style="">$HelloForm.Message</p>

<div class="form-group">
  <label for="email">Email:</label>
  <input type="text" class="form-control" id="email" placeholder="Enter email" name="email">
</div>
<div class="form-group">
  <label for="pwd">Password:</label>
  <input type="password" class="form-control" id="pwd" placeholder="Enter password" name="pwd">
</div>
<div class="checkBox">
</div>
$HelloForm.fields

<input type="hidden" value="{$AbsoluteLink}" name="redirectURL" class="action" id="{$HelloForm.FormName}_action_doSayHello"/>

在我的控制器中

public function HelloForm()
{   
    
    $form = Form::create(
        $this,'HelloForm'
    );
    $actions = new FieldList(
        FormAction::create('doSayHello','Submit')->setAttribute('class','btn btn-success')
    );
    $form = new Form($this,'HelloForm',$actions);
    return $form;
}

public function doSayHello($data,$form)
{

    $form->sessionMessage('thanks for contact us','good');
    return $this->redirectBack();
//i am not getting success message after submit
}

在这种情况下,我提交后会收到成功信息吗?

当我使用标准的 SilverStripe 表单时,它可以工作,但是当使用上面的自定义 HTML 表单时,我被卡住了

解决方法

您可以通过ajax提交表单,这有很多好处。

  1. 页面不必自行刷新
  2. 您可以在提交后通过向上滑动或某种类似的动画制作表单动画。
  3. 您可以处理 successerror 等表单状态

一些示例代码(在 jQuery 中):

let form = $('.form-inline');
    
    $(form).ajaxSubmit({
        success: function() {
            $(form).slideUp();
            $('#form-state').text("Successfully submitted form.");
        }
    })