CodeIgniter custom library error: Call to a member function on a non-object
codeigniter, php
Solution
If your library extends `CI_Controller`. That means that you are actually extending the functionality of the controllers. Instead declare your library like this:
class CommonFuncts { }
You don't need to inherit from `CI_Controller`, since you are writing a library not a controller and a library is not part of the MVC model. It's single class which extends the features of the framework, fixes a common issue or has a functionality used by many controllers.
To access it's methods use:
$this->load->library('CommonFuncts');
$this->commonfuncts->verificaCookie();
If you want to simplify the name with which you call the library use:
// The second argument is the optional configuration passed to the library
// The third argument is the name with which you would like to access it
$this->load->library('CommonFuncts', '', 'common');
$this->common->verificaCookie(); // /\ = configuration
// /\/\/\ = name
Problem
I'm trying to build a custom library which will contain functions that would be available through the whole site. Inside `/application/libraries` I've made a new file `CustomFuncts`: ``` <?php if ( ! defined('BASEPATH')) exit('No direct script access allowed'); /** * @brief CommonFuncts * This class is used to provide common user functions to the whole application. * * @version 1.0 * @date May 2012 * * */ class CommonFuncts extends CI_Controller { protected $ci; /** * function constructor */ function __construct() { $this->ci =& get_instance(); } /** * @brief checkCookie * * Checks for a previous cookie, and if exists: * @li Loads user details to CI Session object. * @li Redirects to the corresponding page. * */ public function verificaCookie(){ $this->ci->load->view('index'); } } /* End of file CommonFuncts.php */ /* Location: ./application/libraries/CommonFuncts.php */ ``` And in controller `welcome.php`: ``` <?php if ( ! defined('BASEPATH')) exit('No direct script access allowed'); class Welcome extends CI_Controller { /** * Index Page for this controller. * * Maps to the following URL * http://example.com/index.php/welcome * - or - * http://example.com/index.php/welcome/index * - or - * Since this controller is set as the default controller in * config/routes.php, it's displayed at http://example.com/ * * So any other public methods not prefixed with an underscore will * map to /index.php/welcome/<method_name> * @see http://codeigniter.com/user_guide/general/urls.html */ public function index() { $this->load->library('commonFuncts'); $this->commonFuncts->verificaCookie(); } } /* End of file welcome.php */ /* Location: ./application/controllers/welcome.php */ ``` I'm getting the following error message: ``` A PHP Error was encountered Severity: Notice Message: Undefined property: Welcome::$commonFuncts Filename: controllers/welcome.php Line Number: 23 Fatal error: Call to a member function verificaCookie() on a non-object in /var/www/vhosts/unikodf.com/httpdocs/application/controllers/welcome.php on line 23 ``` I've tried many things, including extending in the library the `CI_Controller`and using `$this->load->view' instead of`$this->ci->load->view` but still I'm getting the same message.