我的页脚视图包含在包含表单的所有页面中。我希望能够使用CI的表单验证库来验证表单。这可能吗?
目前,表单使用PHP_SELF环境变量回发到当前页面。我不想让它发布到控制器,因为当验证失败时,它会在地址栏中加载控制器名称,这不是所需的行为。
感激地收到任何建议。
谢谢,
达伽兹
答案 0 :(得分:0)
一种方法虽然远非理想,但却是在每个控制器中创建一个“联系”功能。这可以是库/助手的形式。
CI本身不允许您从另一个控制器调用一个控制器,但我相信有一些扩展可以启用此功能。
另一种选择是AJAX调用,它允许您在保留在当前页面上时发布到通用控制器,验证等。
答案 1 :(得分:0)
在这个用例中,我肯定会去寻找一个通用控制器的AJAX。这使您甚至可以在原始页面中提交之前显示错误。
另一种方式(稍微复杂一点),包括将表单数据发布到通用控制器方法,向其传递包含当前URL的隐藏输入。
处理表单的通用控制器方法然后可以重定向到用户提交表单的页面,使用flash会话变量传递验证错误或成功消息:$this->session->set_flashdata('errors',validation_errors())
可能会执行操作(未经测试)
关于这一点的好处是你可以对ajax情况(抑制重定向)和非ajax情况使用通用表单处理方法
答案 2 :(得分:0)
AJAX是最好的,就像其他人说的那样。
我会将表单重定向到一个控制器中的一个函数,您可以为表单本身创建一个控制器。然后使用返回URL隐藏值。就错误而言,您可以使用flashdata将它们发回去。
请记住永远不要复制粘贴代码,这是一种不好的做法并保证错误。
//make sure you load the proper model
if ($this->form_validation->run() == FALSE){
// invalid
$redirect = $this->input->post('url');
$this->session->set_flashdata('errors',validation_errors());
redirect($redirect);
} else {
/*
success, do what you want here
*/
redirect('send them where ever');
}