Especializando Controllers no Code Igniter
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:

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:

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.

June 21st, 2007 - 18:51
O que se pode fazer também, é criar plugins caso seja necessário utilizar uma classe que cria uma funcionalidade a mais.
Já vi alguns tutoriais do pessoal adicionando, por exemplo, o PHPMailer como plugin para enviar e-mails…
June 22nd, 2007 - 10:57
Olá Magus,
De fato pode-se usar Plugins para adicionar funcionalidades ao framework. Mas o caso de especialização é um pouco diferente, já que você estará criando uma extensão da classe.
Dessa forma, a própria classe possui uma funcionalidade, pois herdou da super classe, sem você precisar instanciar de algum lugar.
Obrigado pelo comentário.