Php 如何从CodeIgniter中的表单验证回调方法返回数据?

Php 如何从CodeIgniter中的表单验证回调方法返回数据?,php,codeigniter,Php,Codeigniter,在CodeIgniter文档中 该部分底部的注释说明: 您还可以处理传递给回调的表单数据并返回它。如果回调函数返回的不是布尔值TRUE/FALSE,则假定数据是新处理的表单数据 我有一个回调函数,用于验证图像上载并执行上载,如下所示: public function upload() { $this->form_validation->set_rules('imageFile', 'Image', 'callback_validate_image'); // ...

在CodeIgniter文档中

该部分底部的注释说明:

您还可以处理传递给回调的表单数据并返回它。如果回调函数返回的不是布尔值TRUE/FALSE,则假定数据是新处理的表单数据

我有一个回调函数,用于验证图像上载并执行上载,如下所示:

public function upload() {
    $this->form_validation->set_rules('imageFile', 'Image', 'callback_validate_image');
    // ...
}
然后是回调函数:

public function validate_image() {

        if (empty($_FILES['imageFile'])) {
            $this->form_validation->set_message('validate_image', 'Please select a file');
            return false;
        }

        $config = array (
            'upload_path' => './uploads/',
            'allowed_types' => 'jpg|jpeg|png|gif',
            'max_size' => '5048576'
        );

        $this->load->library('upload', $config);

        if (!$this->upload->do_upload('imageFile')) {
            $this->form_validation->set_message('validate_image', $this->upload->display_errors());
            return false;
        } else {
            $data = array('upload_data' => $this->upload->data());
            return $data;
        }

}

如何将
$data
返回到
upload
函数,以便在一次查询中将所有数据插入数据库?

如果我完成了代码部分,我会这样做

function upload() 
{

    // 'required' doesn't work on file inputs so use empty()
    if (empty($_FILES['imageFile'])) {
        // show error message
    }

    if ($this->form_validation->run() == FALSE)
    {
            echo "Please select a file";
            //$this->load->view('myform');
    }
    else
    {
        $config = array (
            'upload_path' => './uploads/',
            'allowed_types' => 'jpg|jpeg|png|gif',
            'max_size' => '5048576'
        );

        $this->load->library('upload', $config);

        if (!$this->upload->do_upload('imageFile')) 
        {
            $this->form_validation->set_message('validate_image', $this->upload->display_errors());
            return false;
        } 
        else {
            $data['upload_data'] = $this->upload->data();
            $data['form_data'] = $this->input->post(NULL, TRUE);
            var_dump($data);
        }
    }
}
没有通过上传部分。在运行它之前测试它


如果我使用了只用于验证而不用于上载的验证,则不能直接将数据返回到该回调,但是可以使用全局变量或类变量访问该数据。顺便说一下,不建议在表单验证中上载图像。因此,如果没有
do\u upload()
函数,我如何检查文件是否有效?啊,更好的方法!非常感谢。此外,我删除了这一行:
$this->form\u validation->set\u rules('imageFile','Image','required')
,因为required对文件输入不起作用。相反,我只是在
form\u validation->run()
之前做了一个
empty()
检查。更新了我的问题,以便人们可以看到未来。请更新我的答案。如你所说,这将是更好的解释。。乐意帮忙:)