02 февраля 2011

CodeIgniter. Автодополнение кода в Eclipse PDT и Aptana Studio.

   Доброго времени суток. Решил-таки вопрос по автодополнению кода в Eclipse при использовании фреймворка CodeIgniter. Те, кто использует данную связку, знают, что "из коробки" Eclipse не видит базовых классов CodeIgniter, таких как load, email, session etc... Для этого был создан костыль в виде описания классов в base4.php в формате PhpDoc. Для этого необходимо было после объявления класса  написать:

 class CI_Base extends CI_Loader { /*  Вот после этой этой строки */
/**
    * @var CI_Loader
   */
public $load

   Этим мы сообщаем Eclipse о существовании load.  Неудобство данного костыля состоит в том, что если мы хотим получить дополнение методов для своих моделей или контроллеров, их нужно описывать в том  же месте. Мало того, в разных проектах контроллеры могут отличаться. У меня всегда готов "чистый" фреймворк. При создании нового проекта я просто копирую папки фреймворка в папку проекта. И мне совершенно не хочется каждый раз залезать в base4.php для описания нового контроллера. К тому же в новой версии CodeIgniter это файл отсутствует. Потому пришлось найти новое решение.

   Я предлагаю создать фиктивный класс CI_Controller  в корне проекта. Так гораздо проще, чем помнить о существовании описания "где-то там". Дело том, что Eclipse видит объявления только в родительских классах. Хотелось бы просто описывать расширенный класс(читай - контроллер, модель) в файле этого класса. Тем паче, что я использую расширение HMVC. Все модули у меня портативные. С extend class это дело не прокатывает. Почему? У меня ответа нет. Возможно причина в PhpDoc. Просто возможно что-то я там не так понял.
   Единственный на сегодня вариант - созданный файл "foreclipse.php". Его размещаем в корне проекта. В данный файл я добавил все CI_классы, с учетом новой версии. Проекту этот файл не мешает, но Eclipse его видит.
////////////////////////// start of foreclipse.php //////////////////////////

<?php  if ( ! defined('BASEPATH')) exit('No direct script access allowed');
/**
 * CodeIgniter fiction Controller Class
 *
 * This "Class" created for enable code complition in an Eclipse PDT or Aptana
 *
 * @package CodeIgniter
 * @author Asakasinsky Vasily
 * @link http://asakasinsky.blogspot.com
 */

class CI_Controller {
/* ++++++++++++++++++++++++++++ SYSTEM */
 /**
  * @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_Upload
  */
public $upload;

 /**
  * @var CI_Form_validation
  */
public $form_validation;

 /**
  * @var CI_FTP
  */
public $ftp;

 /**
  * @var CI_Table
  */
public $table;

 /**
  * @var CI_Image_lib
  */
public $image_lib;

 /**
  * @var CI_Input
  */
public $input;

 /**
  * @var CI_Javascript
  */
public $javascript;

 /**
  * @var CI_Jquery
  */
public $jquery;

 /**
  * @var CI_Loader
  */
public $load;

 /**
  * @var CI_Language
  */
public $lang;

 /**
  * @var CI_Output
  */
public $output;

 /**
  * @var CI_Pagination
  */
public $pagination;

 /**
  * @var CI_Security
  */
public $security;

 /**
  * @var CI_Session
  */
public $session;

 /**
  * @var CI_Trackback
  */
public $trackback;

 /**
  * @var CI_Parser
  */
public $parser;

 /**
  * @var CI_Typography
  */
public $typography;

 /**
  * @var CI_Unit_test
  */
public $unit;

 /**
  * @var CI_URI
  */
public $uri;

 /**
  * @var CI_User_agent
  */
public $agent;

 /**
  * @var CI_Xmlrpc
  */
public $xmlrpc;

 /**
  * @var CI_Xmlrpcs
  */
public $xmlrpcs;
 /**
  * @var CI_Zip
  */
public $zip;
/* ----------------------------------------- SYSTEM */

/* +++++++++++++++++ YOUR CONTROLLERS */
/**
  * @var My_controller
  */
public $my_controller;
/* --------------------------YOUR CONTROLLERS */

/* ++++++++++++++++++++++ YOUR MODELS */
 /**
  * @var My_model
  */
public $my_model;
/* ---------------------------------+YOUR MODELS */

}
/* End of file foreclipse.php */
/* Location: . */

////////////////////////// end  of foreclipse.php //////////////////////////





С уважением, ваш В.А

5 комментариев:

  1. Отличный пост. Работает и в случае NetBeans. Спасибо

    ОтветитьУдалить
  2. Пожалуйста! Спасибо за отзыв.

    ОтветитьУдалить
  3. Очень приятно что работает. Спасибо за хак.

    ОтветитьУдалить
  4. Спасибо за хак, очень полезный.

    ОтветитьУдалить
  5. Еще с кодеигнайтером очень хорошо работает Codelobster

    ОтветитьУдалить