在视图中使用CodeIgniter表单验证

时间:2011-02-05 11:07:30

标签: codeigniter validation

我的页脚视图包含在包含表单的所有页面中。我希望能够使用CI的表单验证库来验证表单。这可能吗?

目前,表单使用PHP_SELF环境变量回发到当前页面。我不想让它发布到控制器,因为当验证失败时,它会在地址栏中加载控制器名称,这不是所需的行为。

感激地收到任何建议。

谢谢,

达伽兹

3 个答案:

答案 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');
}