CodeIgniter PHP Model Access "Unable to locate the model you have specified"

Alexandre Bolduc picture Alexandre Bolduc · Nov 10, 2011 · Viewed 153.1k times · Source

I have been trying to load some models for this website I am building. However, for an unknown reason, it will bring the following error :

An Error Was Encountered

Unable to locate the model you have specified: logon_model

Now , I have done my research. The problem would be that IC processes file names in lowercase. However, both my file and the file calling is in lower case, as shown here :

echo "VALIDATING";
            // Validation passed. Off we go to account info verification from AA's database. God help us all.
            $this->load->model('logon_model');
            echo "FOUND MODEL";
            $res = $this->logon_model->verify_user($this->input->post('username'),$this->input->post('password'));
            echo $this->input->post('username');
            echo $this->input->post('password');

The execution does not reach "FOUND MODEL", thus stops on the model loading. I have tried to use:

 $this->load->model(site_url('logon_model'));

With no results. Need to mention the model file is correctly placed in the right model folder ?

How can I fix this ?

EDIT : Header for the model file :

class Logon_model extends CI_Model {

....

Answer

Repox picture Repox · Nov 10, 2011

When creating models, you need to place the file in application/models/ and name the file in all lowercase - like logon_model.php

The logon_model.php should contain the following:

<?php  if ( ! defined('BASEPATH')) exit('No direct script access allowed');


class Logon_model extends CI_Model
{
    public function __construct()
    {
        parent::__construct();
    }
    ...

Now, what you can do, to test if your application model is reachable, is to try opening it in the browser - like so:
http://example.org/application/models/logon_model.php

If you see the text No direct script access allowed it means you hit the right file (if you are in doubt, try writing something else in the exit() in the first line).

Secondly, for loading the model in your controllers, you should be able to do like this:

public function index()
{

    $this->load->model('logon_model');
    ...

}

If everything above checks out as expected I would begin looking at file permissions and/or possibly symlinks if you are using any.