我有一个CodeIgniter应用程序。在一个模块中,设置是一个列表页面,其中显示所有当前记录,带有一个用于添加新记录的按钮和一个用于编辑现有记录的按钮。
添加和编辑操作分别具有不同的视图。
我有一个空白的Bootstrap-3模态,另存为单独的视图(modal.php)。单击添加或编辑按钮时,模态会在列表页面上以叠加形式弹出。我已经在添加和编辑按钮的链接中添加了数据属性,以帮助构建模式标题和内容。
示例: 单击“添加”按钮时,将从数据属性中挖掘的模态的标题和按钮文本以及用于添加动作的视图文件作为模态主体加载。
列表页面上的“添加”按钮链接:
<a href="<?php echo site_url('client/add'); ?>" class="btn btn-success ls-modal" data-title="Add New Client" data-btn_txt="Add" data-mode="add">Add</a>
将views / client / add.php文件加载到模式中的Jquery:
$('.ls-modal').on('click', function(e){
e.preventDefault();
var title = $(this).data('title');
var btn_txt = $(this).data('btn_txt');
var mode = $(this).data('mode');
$('#modal_title').html(title);
$("#client-sbmt").html(btn_txt);
$('#client_form_mode').val(mode);
$('#myModal').modal('show').find('.modal-body').load($(this).attr('href'));
});
这一切都很好。但是问题是当我在表格中遇到错误时。我在表单助手中使用CodeIgniter的set_rules()来设置一些验证规则。如果验证失败,那么我将丢失覆盖列表页面的模式窗口。而是将实际视图加载到选项卡中并显示表单错误。
以下是控制器中的add方法:
public function add()
{
//If form submitted
if ($this->input->server('REQUEST_METHOD') === 'POST')
{
$this->load->library('form_validation');
//Form validation
$this->form_validation->set_rules('client_name','Client Name','required');
$this->form_validation->set_rules('email','Email','valid_email');
$this->form_validation->set_rules('phone','phone','min_length[7]');
//if validated
if($this->form_validation->run() == TRUE)
{
$phone = $this->input->post('phone1');
$phone .= $this->input->post('phone2');
$phone .= $this->input->post('phone3');
$params = array(
'client_name' => $this->input->post('client_name'),
'client_code' => $this->input->post('client_code'),
'address1' => $this->input->post('address1'),
'address2' => $this->input->post('address2'),
'city' => $this->input->post('city'),
'postal' => $this->input->post('postal'),
'state' => $this->input->post('state'),
'country' => strtoupper($this->input->post('country')),
'email' => $this->input->post('email'),
'phone_cc' => $this->input->post('phone_cc'),
'phone' => $phone,
'phone_ext' => $this->input->post('phone_ext'),
'po_prefix' => $this->input->post('po_prefix'),
'logo' => $this->input->post('logo')
);
$client_id = $this->Client_model->add_client($params);
//redirect('client/index');
}
}
//Load View
$data['_view'] = 'client/modal_add';
$this->load->view('layouts/main',$data);
}
我如何确保即使出现验证错误,表单仍保留在列表页面的模式内?