Codeigniter表单验证 - 成功后如何取消设置表单值?

2022-08-30 14:14:38

我意识到这个请求与CI文档中提供的示例相悖(该示例建议使用单独的“成功”页面视图),但我想在成功提交表单后重新使用给定的表单视图 - 显示成功消息,然后显示空白表单。我已经尝试了几种方法,但没有成功清除验证集值(取消设置,将规则/字段设置为空数组并重新运行验证)。$_POST

我可以重定向到同一页面,但随后我必须设置一个会话变量来显示成功消息 - 这是一种混乱的方法。

任何想法如何最好地实现上述目标?


答案 1

重定向到自身。这样,就没有运行任何提交...这也为您提供了一种显示flash_data的方法。

    $this->load->library('form_validation');

    $this->form_validation->set_rules('firstname', 'First Name', 'required');
    $this->form_validation->set_rules('surname', 'Sur Name', 'required');

    if ($this->form_validation->run() === TRUE)
    {
                    // save data

        $this->session->set_flashdata('message', 'New Contact has been added');
        redirect(current_url());
    }

    $this->load->view('contacts/add', $this->data);

答案 2

另一个解决方案是 扩展库 。该属性受到保护,因此我们可以访问它:CI_Form_validation$_field_data

class MY_Form_validation extends CI_Form_validation {

    public function __construct()
    {
        parent::__construct();
    }

    public function clear_field_data() {

        $this->_field_data = array();
        return $this;
    }
}

并调用新方法。这样,您就可以传递数据,而无需在会话中存储数据。

    class Item extends Controller
    {
        function Item()
        {
            parent::Controller();
        }

        function add()
        {
            $this->load->library('form_validation');
            $this->form_validation->set_rules('name', 'name', 'required');

            $success = false;

            if ($this->form_validation->run())
            {
                $success = true;
                $this->form_validation->clear_field_data();
            }

            $this->load->view('item/add', array('success' => $success));
        }
    }

推荐