A algum tempo atrás eu expliquei aqui como estender a classe Controller no Code Igniter. Na época, eu não me atentei a um detalhe no guia do usuário do framework, que diz que não se deve estender a library Controller usando o load automático, salvando o arquivo na pasta application/libraries e usando o prefixo configurado.

A princípio pensei que era um problema no guia do usuário do CI, mas analisando com mais calma, de fato pode não ser bom estender o Controller dessa forma para incluir lógica aos seus controllers.

Imagine nosso sistema da forma analisada abaixo, onde temos 2 telas de cadastro e 1 relatório:

howtonotextendcci.gif

Vejam que como usamos o MY_Controller pra adicionar a lógica de Cadastros, nosso Relatório ficou órfão de uma especialização que nos pouparia tempo de desenvolvimento, caso tenhamos que implementar outros relatórios.

Pra resolver este problema, podemos criar nossa especialização na pasta de controllers da aplicação (ao invés da libraries), e incluir este arquivo nas classes que vamos estender. As classes ficariam dessa forma:

howtoextendcci.gif

Dessa forma, podemos criar quantos tipos de controllers quisermos. Pra facilitar ainda mais o trabalho, você ainda pode implementar a função __autoload() para não precisar ficar sempre incluindo a classe nos arquivos que for utilizar.