2

我正在尝试从我的表单验证在 codeigniter 中的扩展类中验证图像,但它不起作用

控制器

public function __construct() {
    parent::__construct();
    $this->load->library('form_validation');
}

public function add_photo() { 

 $this->form_validation->set_rules('pic','Photo','validate_image['.$_FILES['pic'].']');


  if($this->form_validation->run()) {
   //some further coding
  }
}

在我的图书馆

class MY_Form_validation extends CI_Form_validation {

        public function __construct() {
        parent::__construct();
        $this->_CI = &get_instance();
    }

public function validate_image($image = NULL) {
        print_r($image);
        $file_name      =   $image['name'];

        $allowed_ext    =   array('jpg', 'jpeg', 'png', 'gif', 'bmp');
        $ext                =   strtolower(end(explode('.', $file_name)));

        $allowed_file_types =   array('image/jpeg','image/jpg','image/gif','image/png');
        $file_type              =   $image['type'];

        if(!in_array($ext, $allowed_ext) && !in_array($file_type, $allowed_file_types)) {
            $this->_CI->form_validation->set_message('validate_image', 'This file type is not allowed');
            return false;
        }

        if($image['size'] > 2097152) {
            $this->_CI->form_validation->set_message('validate_image', 'File size Exeeds');
            return false;
        } else {
            return true;
        }
    }


}

任何建议和帮助将不胜感激。

4

2 回答 2

5

它不会form validation像尝试一样工作,

function validate_image(){
    $config['upload_path'] = './uploads/';
    $config['allowed_types'] = 'gif|jpg|png';
    $config['max_size']    = '100';
    $config['max_width']  = '1024';
    $config['max_height']  = '768';

    $this->upload->initialize($config);
    if (!$this->upload->do_upload('userfile'))
    {
        $this->validation->set_message('userfile',$this->upload->display_errors());
        return false;
    } else {
        return true;
    }
}  

参考这个

于 2013-09-04T11:44:07.393 回答
3

你可以这样做:控制器:

public function add_photo() { 
    $this->form_validation->set_rules('product_image','Product Image','callback_validate_image');
    if($this->form_validation->run()==FALSE){
        $this->add($category_id);    
    }else{
        //your logic here
    }
}

回调验证方法:

public function validate_image() {
    $config = array(
        'allowed_types'=>'jpg|png',
        'upload_path'=> realpath(APPPATH . '../assets/img'),
        'max_size'=>1
        );
    $this->load->library('upload', $config);
    if (!$this->upload->do_upload('product_image'))
    {
        $this->form_validation->set_message('validate_image',$this->upload->display_errors());
        return false;
    } else {
        return true;
    }
}

APPPATH将为您提供 codeigniter 的应用程序文件夹的路径。
realpath()会给你没有的实际路径../

于 2014-05-10T14:10:57.720 回答