Bug estendendo o Code Igniter: MY_Model


No meu artigo sobre como estender o Core do Code Igniter, eu informei sobre um possível bug que não nos permite criar nosso MY_Model, como manda o user guide da framework.

Reportei o bug no fórum e até hoje não obtive resposta do desenvolvedor do CI, mas acredito que a solução que encontrei é aceitável. A alteração deve ser realizada no arquivo Loader.php, que está na pasta system\libraries. No método model() desta classe, temos o seguinte trecho:

if ( ! class_exists('Model'))
{
    require_once(BASEPATH.'libraries/Model'.EXT);
}

Ou seja, ele carrega a classe Model, mas não realiza nenhuma verificação se criamos alguma estensão (MY_Model). Para resolver o problema, verifiquei que existe uma função que executa esta tarefa de carregar uma classe buscando por extensões. Logo, bastava utilizá-la. No lugar do código anterior, coloquei a chamada para a função:

load_class('Model', false);

O if não é necessário, pois a função também realiza esta verificação. O segundo parâmetro é utilizado para que a classe não seja instanciada, apenas carregada. Assim, evitamos o problema de instanciar classes, dentro de um controle, sem que elas tenham sido definidas.

  1. No comments yet.
(will not be published)