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;
    }
}

APPPATHcodeigniter のアプリケーション フォルダーへのパスが表示されます。
realpath()なしで実際のパスを提供します../

于 2014-05-10T14:10:57.720 に答える