Skip to content
Advertisement

Codeigniter 3 – A PHP Error was encountered, Severity: Notice, Message: Undefined property: Home::$home

I’m about to launch a website which I built with codeigniter3. I’ve made configuration changes such as base_url, database, etc. But it shows me an error like this :

Message: Undefined property: Home::$home

Filename: controllers/Home.php

Line Number: 18

Backtrace:

File: /home/u8460348/public_html/application/controllers/Home.php
Line: 18 Function: _error_handler

File: /home/u8460348/public_html/index.php Line: 294 Function:
require_once ```

Message: Call to a member function select() on null

Filename: /home/u8460348/public_html/application/controllers/Home.php

Line Number: 18

Backtrace:

File: /home/u8460348/public_html/index.php Line: 294 Function:
require_once ```

So, here is my controller :

<?php

defined('BASEPATH') or exit('No direct script access allowed');

class Home extends My_Controller
{

    public function index($page = null)
    {
        $data['title']  = 'Home | Omid Health Style';
        $data['content']    = $this->home->select(
            [
                'product.id', 'product.slug', 'product.title AS product_title', 'product.description',
                'product.image', 'product.price', 'product.is_available', 'product.weight',
                'category.title AS category_title', 'category.slug AS category_slug'
            ]
        )
            ->join('category')
            ->where('product.is_available', 1)
            ->paginate($page)
            ->get();
        $data['total_rows'] = $this->home->where('product.is_available', 1)->count();

        $this->home->table = 'blog';
        $data['blogs'] = $this->home->select(
            [
                'blog.id', 'blog.slug', 'blog.title AS blog_title', 'blog.description', 'blog.content',
                'blog.image', 'blog_category.title AS blog_category_title', 'blog_category.slug AS blog_category_slug'
            ]
        )
            ->join('blog_category')
            ->paginate($page)
            ->get();
        $data['total_rows'] = $this->home->count();

        $data['page']   = 'pages/home/index';

        $this->view($data);
    }
}

Here is my Home_model.php :

<?php

defined('BASEPATH') or exit('No direct script access allowed');

class Home_model extends MY_Model
{

    public $table    = 'product';
    protected $perPage  = 8;
}

/* End of file Home_model.php */

And here is in my core folder, because i made a custom configuration like this :

<?php

defined('BASEPATH') or exit('No direct script access allowed');

class My_Controller extends CI_Controller
{


    public function __construct()
    {
        parent::__construct();
        $model = strtolower(get_class($this));

        if (file_exists(APPPATH . 'models/' . $model . '_model.php')) {
            $this->load->model($model . '_model', $model, true);
        }
    }


    // Load view with Default Layouts
    public function view($data)
    {
        $this->load->view('layouts/app', $data);
    }
}

If I’m running the program in my localhost, it’s totally fine and works. Why do I get this error on a production server?

Advertisement

Answer

From the error message you received, the important part is

Message: Call to a member function select() on null

which means your model was not loaded!

as your code works on your localhost environment, but not on the production server, most likely the error is caused by applying wrong Naming Conventions:

  1. File names must be capitalized. For example: Myclass.php Class
  2. declarations must be capitalized. For example: class Myclass Class
  3. names and file names must match.
User contributions licensed under: CC BY-SA
7 People found this is helpful
Advertisement