CodeIgniter:表单验证的良好实践

时间:2015-02-24 21:35:29

标签: php codeigniter

我正在使用Parse + CodeIgniter开发项目。 我有两个屏幕来管理ParseUsers:allUsers.php,列出所有用户。 和detailUser.php,用于创建/编辑用户。

当用户提交表单(新的ParseUser)时,我调用save方法。那包含代码:

try{

                if ($user_id)
                    $user->save(true); // Update
                else
                    $user->signUp(); // Insert

                $this->session->set_flashdata('success', 'Success');
                redirect('all-users');              
            }
            catch(Parse\ParseException $error){
                $error_message = $error->getMessage();
                $this->session->set_flashdata('error', 'Error: ' . $error_message); 
                $this->data['user'] = $user;
                $this->view = 'user/userDetail';
            }           

在视图中,我有这个(示例用户的名字):

<input type="text" id="name" name="name" class="form-control" required value="<?php if(isset($user)): echo $user->name; endif;?>">

表单会保持字段正确填充,但如果我刷新页面,则flashdata为空,而不是闪存数据。 所以,我在搜索后发现人们说flashdata只能用于重定向。

如果我重定向我的页面,则会显示flashdata。但是,这些字段没有填满。

我读到了set_value,这是维护字段的正确方法吗?但是,我喜欢只有两个视图,一个列出所有视图,另一个创建/编辑用户。那么,如果我使用set_value,这可能吗? 什么是最佳做法?

1 个答案:

答案 0 :(得分:0)

使用加载而不是重定向

        try{

            if ($user_id)
                $user->save(true); // Update
            else
                $user->signUp(); // Insert

            $this->session->set_flashdata('success', 'Success');
            $this->load->view('path');//use load instead of redirect              
        }
        catch(Parse\ParseException $error){
            $error_message = $error->getMessage();
            $this->session->set_flashdata('error', 'Error: ' . $error_message); 
            $this->data['user'] = $user;
            $this->view = 'user/userDetail';
        }