Welcome Guest, Not a member yet? Register   Sign In
HMVC problem...CI spits out undefined property when loading database.

Hi all!

My problem stems when I extend the Controller class.

//MX_Controller.php before HMVC it was MY_Controller.php

abstract class TemplateController extends Controller {

My controllers seem to work well with the current setup. Even right down to the my module controllers. The problem starts when I try to access the DB, CI complains that $db is an undefined property. And that's when I invoke $this->load->database()! Strangely when I revert back to using Controller it works fine. I feel like this is a simple problem to lick but for the moment I'm stumped...

Your abstract class definition is not relevant to the problem, why are you showing this?

The MX_Controller file is not actually required, you may save your controller base class in a like named application/libraries file and it will be (spl) autoloaded for you as needed.

Please explain your problem in more detail and show some real code. Make sure you use the forums [code] ... [/code] tags properly.

I apologize I should have been a bit more clear with my intention. I don't know if I should provide any code for such a trivial operation. In a nutshell I cannot access the database library when using my custom base controller. Even when I'm inheriting from HMVC's Controller class.

I have created code that mimics the code example you give and accessing the database ($db object) works fine.

Now I'm kicking myself in the arse for not having the foresight to give some actual code. When I think about it...my Templater library calls an instance of CI within it's constructor. Do you think it has something to do with the error?

abstract class TemplateController extends Controller {
    //Configuration variables
    public $template = 'test_layout';
    public $enable_left_nav_parts = Array();

    //Shared variables for children
    public $vehData;

    public function TemplateController() {

        $this->template = new View($this->template);

class View {
    private $view_file;
    private $JI;
    private $template_vars = Array();

    public function __construct($view_file) {
        $this->JI =& get_instance();
        $this->view_file = $view_file;
    public function __set($var, $val) {
        $this->template_vars[$var] = $val;

    public function __toString() {
        try {
            return $this->render(True);
        } catch (Exception $e) {
            return (string) $e;

    public function render($pass_as_value=FALSE) {
        return $this->JI->load->view($this->view_file,

So where are you accessing the database? I can't see any reference to the $db object in your code.

Ok here is the offending code...at this point is where CI cries foul saying that I'm calling on a member function get on a non object. I'm stumped...I switch back to inheriting from the Controller and it works fine. But as soon as I inherit back to TemplateController things go awry.

class Test extends TemplateController {
    public function show_names() {
        $data->firstname = $this->db->get('users');
        $this->load->view('read', $data);  

Theme © iAndrew 2016 - Forum software by © MyBB