Autocomplete do CodeIgniter 2 no Eclipse

16 de maio de 2011, em Integração, por

Autocomplete do CodeIgniter 2 no Eclipse: exemplo

Depois de alguns artigos aqui no CodeIgniter Brasil, algumas pessoas enviaram questões referentes à facilidade em se programar com CodeIgniter. É certo que cada um escolhe seu ambiente de desenvolvimento segundo seus próprios critérios, mas existem alguns que são realmente fantásticos para se trabalhar com PHP. É o caso do Eclipse PDT (PHP Development Tools), “ramificação” do Eclipse, um dos IDEs mais conhecidos e eficientes para programação.

Então, para o caso de você já usar o IDE, este tutorial vai ensinar como fazer autocomplete do CodeIgniter no Eclipse. Caso ainda não o conheça, dê uma pesquisada, baixe e teste o IDE que certamente você vai gostar. Não digo que esta deve ser a ferramenta definitiva para todas as necessidades, mas, certamente, é uma opção interessante a se considerar. Então, para entender as explicações, é preciso que você tenha tido, pelo menos, um mínimo de contato com o Eclipse PDT.

A lógica do autocomplete CodeIgniter + Eclipse

Por padrão, o Eclipse já faz autocomplete de classes e funções que você desenvolve em diferentes arquivos. Quando se trata de um projeto “comum”, é fácil para ele reconhecer e realizar o autocompletar. No entanto, para o CodeIgniter, em função da disposição peculiar de seus arquivos constituintes, devemos “ensinar” a ferramenta a reconhecer estas classes e funções.

O que é preciso para que o Eclipse faça o autocompletar do CodeIgniter é que ele, de alguma forma, tenha acesso e reconheça todas as classes e funções presentes no core do CI. A partir disso, ele será capaz de realizar o autocomplete dentro de qualquer controller e/ou model que você crie em seu projeto.

Basicamente, o que precisamos é:

  • Criar 2 projetos no Eclipse: 1 com o CodeIgniter “puro”; outro com o CodeIgniter para o projeto, propriamente dito;
  • Incluir, no CI “puro”, um pequeno trecho de código em 2 arquivos do code;
  • No “Include Path” do projeto, propriamente dito, referenciar o projeto do CI “puro”;

Criando projetos no Eclipse

Baixe a versão mais recente do CodeIgniter. O download fornece um arquivo zipado. Na pasta de sua preferência, descompacte a estrutura 2 vezes: uma delas será nossa “base”, o outro, o projeto oficial. Chame, por exemplo, respectivamente, “CI_BASE” e “PROJETO”.

No Eclipse, crie 2 projetos, cada um apontando para uma pasta que foi gerada a partir da extração do CodeIgniter.

Autocomplete do CodeIgniter 2 no Eclipse

Tela mostrando os 2 projetos criados no Eclipse

Código-extra no “CI_BASE”

No projeto CI_BASE, você vai precisar alterar 2 arquivos de core:

  • /system/core/controller.php
  • /system/core/model.php

Acrescente, em ambos, exatamente após o início do escopo da classe, o seguinte:

/**
 * 
 * @var CI_User_agent
 */
public $agent;
 
 /**
 * 
 * @var CI_Benchmark
 */
public $benchmark;
 
/**
 * 
 * @var CI_Calendar
 */
public $calendar;
 
/**
 * 
 * @var CI_Cart
 */
public $cart;
 
/**
 * 
 * @var CI_Config
 */
public $config;
 
 /**
 * 
 * @var CI_DB_active_record
 */
public $db;
 
 /**
 * 
 * @var CI_Email
 */
public $email;
 
/**
 * 
 * @var CI_Encrypt
 */
public $encrypt;
 
/**
 * 
 * @var CI_Form_validation
 */
public $form_validation;
 
/**
* 
* @var CI_FTP
*/
public $ftp;
 
/**
 * 
 * @var CI_Input
 */
public $input;
 
/**
 * 
 * @var CI_Image_lib
 */
public $image_lib;
 
/**
 * 
 * @var CI_Language
 */
public $lang;
 
/**
 * 
 * @var CI_Loader
 */
public $load;
 
/**
 * 
 * @var CI_Output
 */
public $output;    
 
/**
 * 
 * @var CI_Pagination
 */
public $pagination;
 
/**
 * 
 * @var CI_Parser
 */
public $parser;
 
 
/**
 * @var CI_Router
 */
public $router;
 
/**
 * 
 * @var CI_Session
 */
public $session;    
 
/**
 * 
 * @var CI_Table
 */
public $table;
 
/**
 * 
 * @var CI_Trackback
 */
public $trackback;    
 
/**
 * 
 * @var CI_Typography
 */
public $typography;
 
/**
 * 
 * @var CI_Unit_test
 */
public $unit;
 
/**
 * 
 * @var CI_Upload
 */
public $upload;
 
/**
 * 
 * @var CI_URI
 */
public $uri;
 
/**
 * 
 * @var CI_Xmlrpcs
 */
public $xmlrpcs;    
 
/**
 * 
 * @var CI_Zip
 */
public $zip;

Atente-se em inserir o código nos lugares corretos.

Autocomplete do CodeIgniter 2 no Eclipse

Insira o código onde está a linha em destaque. O mesmo para /system/core/model.php.

Referenciando CI_BASE em PROJETO

Por fim, é preciso referenciar o projeto CI_BASE em PROJETO, a fim de que o autocomplete aparece neste. Para tanto, faça o seguinte:

  • Clique o botão direito no projeto PROJETO e vá em Properties > PHP Include Path > aba Projects > botão Add…
  • Selecione o check de CI_BASE > botão OK
  • Confirme a ação clicando no botão OK
Autocomplete do CodeIgniter 2 no Eclipse

Include Path do projeto CI_BASE

A partir de agora, o autocomplete do CodeIgniter estará disponível em qualquer controller e model que você crie para seu projeto! Faça o teste e comprove: crie algum controller e tente usar, por exemplo, a função de carregar um view (já explicada no artigo sobre Views no CodeIgniter).

Autocomplete do CodeIgniter 2 no Eclipse

Exemplo de autocomplete do CodeIgniter no Eclipse

Conclusão

Na verdade, PROJETO continua sendo somente uma “instalação” do CodeIgniter. CI_BASE foi adicionado à lista de projetos somente para dar o suporte necessário ao autocomplete. Portanto, esta é uma técnica específica de prover o autocomplete do CodeIgniter no Eclipse, servindo para conferir maior comodidade, rapidez e eficiência para quem programa com CI neste incrível IDE.

33 comentários em "Autocomplete do CodeIgniter 2 no Eclipse"

gravatar

Diego Walisson  em 16 de maio de 2011

Há algum modo do autocomplete funcionar nas views?

gravatar

Tárcio Zemel  em 16 de maio de 2011

O CodeIgniter usa MVC, então seria um tanto que desnecessário…

gravatar

Diego Walisson  em 17 de maio de 2011

Sim… mas por exemplo, o Controller oferece variáveis e consigo até métodos, que podem ser executados nas views. Acho que aí teria uma utilidade o codecompletion, não?

gravatar

Tárcio Zemel  em 17 de maio de 2011

Segundo o MVC, o mais indicado é fazer todas as "operações" no controller e enviar os dados já prontos para o view, justamente para evitar misturar lógica de programação com apresentação.

Respondendo à sua pergunta, se tem alguma maneira de habilitar o autocomplete para os views, ainda não fiquei sabendo…

Abraços!

gravatar

Diego Walisson  em 17 de maio de 2011

Ok, valeu pela dica. O certo mesmo é concentrar todos os esforços antes da view né?

[]'s

gravatar

marcelofsdiniz  em 17 de maio de 2011

E Tárcio, sei q esta falando para Eclipse, mas sabe de algo para o NetBeans 7?
Obrigado

gravatar

Tárcio Zemel  em 20 de maio de 2011

Rapaz, se tiver como, eu não sei… Também, não mexo com NetBeans. =P

Se ficar sabendo de algo, coloque aqui pra gente. Abraços!

gravatar

Diego Walisson  em 23 de maio de 2011

http://codeigniter.com/forums/viewthread/187949/

Veja aí se resolve e poste aqui pra gente, blz?

gravatar

daniel  em 24 de maio de 2011

Show. Eu que ainda estou aprendendo ficava com o User Guide aberto o tempo todo enquanto programava pq ainda não lembrava de certas coisas.

gravatar

squiter  em 27 de maio de 2011

Vou falar que minha experiencia com esse metodo de auto complete do eclipse para CI está sendo fraquissima!
Afinal, desse modo o eclipse não sabe quais funções pertencem a quais objetos o que dificulta bastante a utilização, alem de que o código não está devidamente documentado, o que também tira a praticidade de, por exemplo, as tooltips antes do auto complete.
E ele também não reconhece as funções de seus controllers e/ou models, o que tambem é bem ruim… mas fazer o que… é melhor do que nada… ^^
B

gravatar

Tárcio Zemel  em 8 de junho de 2011

Que isso, cara, claro que reconhece! O autocomplete pegar meus métodos e propriedades, aqui, tranquilamente.

Tente fazer o seguinte: clique com o botão direito do mouse em cima do projeto e vá em Configure > Add PHP Support.

gravatar

Tárcio Zemel  em 8 de junho de 2011

Isso daí aumenta muito a produtividade! Apareça!

gravatar

daniel  em 9 de junho de 2011

Sim sim, mas em certos casos onde vc vai fazer o que já fez, como uma validação de formulario e tals, e só não lembra o bendito comando, ajuda muito.
Parabéns pelo site, atualize mais!

gravatar

Tárcio Zemel  em 10 de junho de 2011

É verdade. E, para complementar o autocomplete e a documentação, aproveita pra fazer o download do Cheat Sheet do CI2. Só clicar ali na barra lateral! ;-)

gravatar

bruno welber  em 12 de junho de 2011

infelizmente não consegui, após seguir o passo a passo informado, tentei ctrl spaço / f2, mas; sempre resulta em no default….e nada ocorre;rs.
alguma idéia do que possa ser feito?

gravatar

Phellipe  em 20 de junho de 2011

Tarcio, li o livro CodeIgniter porem estou com algumas duvidas. Como faço para chamar um metodo no controlador a partir de um form_dropdown? Chamra um metodo ao selcionar um item do meu dropdown?

gravatar

henriqueluz  em 27 de junho de 2011

Fala Tárcio, muito bom teu blog.
To começando com o CodeIgniter agora e ele tem tirado muitas dúvidas minhas. Coloquei um link do seu blog no meu. Se puder dá uma passada por lá, beleza? http://henriqueluz.wordpress.com

Abraços

gravatar

Tárcio Zemel  em 27 de junho de 2011

Segundo entendi na sua dúvida, neste caso você terá que usar alguma coisa em AJAX. Fique ligado que, brevemente, publicaremos um artigo sobre como mexer com CI + AJAX.

Abraços!

gravatar

Tárcio Zemel  em 27 de junho de 2011

Obrigado, Henrique, abraços!

gravatar

Anderson  em 4 de novembro de 2011

Parabéns pelo excelente blog, com informações muito úteis, tem me ajuda com muitas duvidas com relação ao CI.
Gostaria que por gentileza, que me indicasse algum artigo com CI2 e o Doctrine, cheguei a colocar as libs do Doctrine no CI, mas não tenho a mínima ideia de como usar.
Se alguém conhecer algum tuto ficaria agradecido .
Grato.

gravatar

Tárcio Zemel  em 17 de novembro de 2011

Olá, Anderson!

Existem diversos tutoriais sobre isso, basta googlar “codeigniter doctrine”.

Não sei quais as especificações do seu projeto, mas, pessoalmente, acho o Doctrine muito custoso para se começar a usar… Recomendo que você dê uma olhada no DataMapper, pelo menos para conhecer. Brevemente haverá uma série de artigos abordando o funcionamento do DM aqui no CodeIgniter Brasil.

Abraços!

gravatar

xxxx  em 28 de março de 2012

Coloquei aquele codigo dentro do projeto mesmo e resolvi "2 problemas":

- Autocomplete não duplicado;
- Manter o tooltip.

Até agora não tive problemas…mas acredito que exista algum impacto quanto a essa alteração, pois o processo é muito mais simples, não precisa criar outro projeto. Vou deixar assim por um tempo observando se há algum comportamento estranho na aplicação.

gravatar

Tárcio Zemel  em 28 de março de 2012

As únicas questões que vejo nessa abordagem é colocar código a mais que não é usado (a não ser pelo Eclipse) e, quando fizer upgrade do CI, você vai ter um retrabalho pra inserir o código de novo…

Fora isso, funciona, sim! :-)

gravatar

Marcos  em 12 de julho de 2012

Tárcio, utilizava o Eclipse para Java EE e ao começar a utilizar o CodeIgniter para PHP, me deparei com o seguinte: basta criar um projeto PHP no Eclipse e indicar a pasta que contém o CodeIgniter que vc vai utilizar no projeto que o Eclipse automaticamente leu a pasta CORE e iniciou o autocomplete! Ou seja, não precisei configurar um projeto “auxiliar” vazio para ele ler o CORE e Helpers para utilizar o AutoComplete. Utilizo windows (XP e 7) e o Eclipse Indigo.

Parabéns pelo site e continue com o ótimo trabalho, abraços.

gravatar

bruno welber  em 15 de julho de 2012

Olá, agora tentei no eclipse juno (4.2) ele reconhece os objetos, porem os métodos não…por exemplo $this->obj normau, mas; obj-> já não reconhece mais. conhece algum caso que deu resultados no juno?

gravatar

Tárcio Zemel  em 16 de julho de 2012

Que interessante! Vai ver, com as atualizações periódicas que eles fazem, o processo de procurar por classes e prover o autocomplete está melhor. De qualquer maneira, caso alguém não consiga tão facilmente, está dada a dica.

Lembrando que esse tutorial de autocomplete para Codeigniter serve para Aptana, também.

Abraços!

gravatar

Rafael Barreto  em 28 de julho de 2012

Excelente!

gravatar

Gustavo Rafael  em 1 de abril de 2013

Uma alternativa para quem não quer adicionar outro projeto no workspace é adicionar o diretório do CI ("BASE") como uma "External Source Folder".

Properties -> PHP Include Path -> Libraries -> Add External Source Folder.

gravatar

Erick  em 21 de novembro de 2014

Parabéns muito bom o post, vai me ajudar muito a partir de agora!!! show

gravatar

codelobster  em 27 de novembro de 2014

Codelobster has better autocomplete for CodeIgniter: http://codelobster.com/codeigniter.html

gravatar

ramme  em 3 de dezembro de 2014

Junto com Sublime, o NetBeans para mim é uma das melhores IDE para programação web, tem sim tudo isso que foi falado.

gravatar

leandro  em 20 de fevereiro de 2015

Para autocomplete das minhas próprias classes no Eclipse, eu crio uma nova instância dessa classe atribuindo-a a um atributo da classe onde desejo utilizá-la….

ex:

no meu controller..além de carregar o model….eu crio uma nova instancia desse Model….

$this->load->model('teste_model'); //carrega normalmente o model…

$this->teste_model = new Teste_model(); //nova instancia(model) atribuida a um novo atributo(controller)

assim….o Eclipse consegue fazer o autocomplete desse meu model no meu controller…
faço isso no construtor do Controller….e apenas em desenvolvimento…

quando coloco a aplicação em produção…..apago..ou comento essa nova instancia….para nao ficar com 'model duplicado' e nao utilizar processamento desnecessário….

utilizo esse esquema só para o autocomplete em desenvolvimento…..

é uma 'adaptação técnica' eu sei….mas pra mim funciona…até agora…rss

Comente!