Evitando conflictos de nombres entre Models y Controllers en CodeIgniter

En una época en cual las discusiones sobre qué framework usar, cuál es mejor, cuál es peor, etc, etc; yo sigo usando CodeIgniter para armar prototipos rápidos, para algunas pruebas de concepto e incluso para pequeñas aplicaciones (de hecho, la primera versión del módulo de traducciones para Magento, fue una aplicación CI).

Uno de los problemas que padece éste framework es que no puede usarse el mismo nombre para un modelo y para un controlador.

Normalmente esto se resuelve agregando un sufijo al modelo.

class Modulo_model extends CI_Model {
    //métodos de mi modelo
}

Como buen programador, la neurosis me persigue y me molesta de sobremanera tener que instanciar luego ese modelo usando:

$this->load->model('modulo_model');

Para evitar la severa molestia, lo que podemos aplicar es una sobrecarga a la clase core CI_Loader, en la cual vamos a agregar tan sólo un par de líneas al método model().

Debajo de la línea

$model = ucfirst($model);

Y antes de

$CI->$name = new $model();

Agregamos lo siguiente

if (class_exists($model . '_model')) {
    $model = $model . '_model';
}

A partir de ahora, nuestra clase seguirá llamándose como hasta ahora, con el sufijo (sólo en la declaración de la clase), pero al momento de instanciarla, sólo bastará con:

$this->load->model('modulo');
Tweet about this on TwitterShare on Google+Email this to someoneShare on FacebookShare on LinkedIn