【问题标题】:Codeigniter - handle form submission from different controller actionCodeigniter - 处理来自不同控制器操作的表单提交
【发布时间】:2011-08-18 20:56:36
【问题描述】:

在codeigniter中处理以下情况的最佳方法是什么:

Home 控制器有一个 index 动作和一个 submit 动作。

提交操作用于表单提交。我想通过索引控制器加载页面 - 包括在表单提交之后,即使用表单错误数据重新填充表单输入错误等。

最好的方法是什么 - 无需索引控制器处理主页加载和表单提交。

【问题讨论】:

    标签: php codeigniter


    【解决方案1】:

    如果您redirect(),您将无法使用set_value() 重新填充表单字段。

    最简单的方法是让您的索引控制器同时处理默认加载行为和提交。

    function index()
    {
        if($this->input->post('foo'))
        { // something was POSTed
            $this->load->library('form_validation');
            //validation rules
        } else
        { // normal view
            //
        }
    
        $this->load->view('home');
    }
    

    或者,您可以设置 indexsubmit 控制器,并让它们指向同一个视图,从而检测是否设置了 validation_errors() 并相应地重新填充表单字段。

    第三个选项(hackish):您可以使用 flashdata 来保持提交错误和提交的表单值通过重定向返回索引。这样的事情会起作用:

    $this->session->set_flashdata('errors', $validation_errors());
    

    【讨论】:

    • 所以如果我有一个控制器来处理注册,我应该有一个 if-else 如果数据发布,然后处理注册细节。否则,只需加载注册表?
    【解决方案2】:

    只需将您的表单指向您的提交操作:

    <form method="post" action="/home/submit">
    

    然后,使用submit 操作在redirecting 返回index 操作之前验证您的输入。

    【讨论】:

    • 是的,但是如何将表单验证错误和消息等返回到主索引控制器,以便再次加载主页。
    • 那么您是否建议如果我的提交操作验证失败,那么我仍然可以使用 从索引操作中获取验证错误?
    • 不,您必须使用 GET 参数或会话闪存变量将这些错误传递回您的 index 操作。如果您尝试这样做只是为了避免“重新提交以刷新”问题,那么简单的解决方案是简单地处理 index 操作上的提交,并在您完成处理后将用户重定向到 index该输入(同样,使用会话闪存或获取参数来传递该信息)。
    猜你喜欢
    • 2016-01-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-07-18
    • 1970-01-01
    相关资源
    最近更新 更多