Codeigniter HMVC - Cannot load a library in a function

406 views Asked by At

I am having this issue with Codeigniter HMVC.

When I want to load a library such as 'upload' or 'image_lib', the instance is always null if I load it in a local function in a class. However, when I instantiate an object in a constructor, the load is successful and I can call functions for the library class.

Here's the code:

<?php
class Listed_items extends MX_Controller {

function __construct() {
parent::__construct();
$this->load->library('form_validation');
$this->load->library('upload'); // this works
$this->load->library('image_lib'); // this works
$this->form_validation->set_ci($this);
}

function do_upload($item_url) {
$submit = $this->input->post('submit', true);
if ($submit == "cancel") {
  redirect('listed_items/create_item/'.$item_url);
} else if ($submit == "upload") {
  $config['upload_path'] = './big_pics/';
  $config['allowed_types'] = 'gif|jpg|png';
  $config['max_size'] = 300;
  $config['max_width'] = 3036;
  $config['max_height'] = 1902;
  $file_name = $this->site_security->generate_random_string(16);
  $config['file_name'] = $file_name;

  $this->load->library('upload', $config); // this calls on null
  }
 }
}

It will be awesome if someone can help with this problem.

1

There are 1 answers

0
NikuNj Rathod On

You can try this solution for your problem.

Please change your controller file.

<?php
class Listed_items extends MX_Controller {

    function __construct() {
        parent::__construct();
        $this->load->library('form_validation');
        $this->form_validation->set_ci($this);
    }
    function do_upload($item_url) {
        $submit = $this->input->post('submit', true);
        if ($submit == "cancel") {
            redirect('listed_items/create_item/' . $item_url);
        } else if ($submit == "upload") {
            $config['upload_path'] = './big_pics/';
            $config['allowed_types'] = config_item('allowed_files');
            $config['max_size'] = '20240000245';
            $config['overwrite'] = TRUE;
            $config['encrypt_name'] = TRUE;
            $config['max_width'] = '1024';
            $config['max_height'] = '768';
            $imgage_width=!empty($width) ? $width :60;
            $imgage_height=!empty($height) ? $height :60;
            $this->load->library('upload', $config);
            $this->upload->initialize($config);
            if (!$this->upload->do_upload($field)) {
                $error = $this->upload->display_errors();
                $type = "error";
                $message = $error;
                set_message($type, $message);
                return FALSE;
                // uploading failed. $error will holds the errors.
            } else {
                $fdata = $this->upload->data();
                $configer =  array(
                  'image_library'   => 'gd2',
                  'source_image'    =>  $fdata['full_path'],
                  'maintain_ratio'  =>  TRUE,
                  'width'           =>  $imgage_width,
                  'height'          =>  $imgage_height,
                );
                $this->load->library('image_lib');
                $this->image_lib->clear();
                $this->image_lib->initialize($configer);
                $this->image_lib->resize();
                $img_data ['path'] = $config['upload_path'] . $fdata['file_name'];
                return $img_data;
                // uploading successfull, now do your further actions
            }
        }
    }
}
?>

I hope this will helps you.