Eclipse で CodeIgniter 2.0 のコード補完
(2011/4/21 追記) この記事は古くなっています。Eclipse で CodeIgniter のコード補完を行わせる冴えたやり方 を参照してください。
昨日の記事 Eclipse で CodeIgniter のコード補完 ですが、そのままではコーディングでのコード補完はできましたが、CodeIgniter Reactor がエラーで動作しなくなってました。
そこで改良版としてモデルも含めてコード補完できるコードを生成するコントローラを作成してみました。
application/controllers/eclipse.php
<?php if ( ! defined('BASEPATH')) exit('No direct script access allowed'); class Eclipse extends CI_Controller { function __construct() { parent::__construct(); } function index() { $lines = array(); // libraries $_ci_varmap = array('unit_test' => 'unit', 'user_agent' => 'agent'); $_skip = array( 'codeigniter', 'common', 'controller', 'driver', 'exceptions', 'hooks', 'loader', 'model', 'profiler', 'router'); $libraries = array_merge(glob(BASEPATH . 'core/*.php'), glob(BASEPATH . 'libraries/*.php')); foreach ($libraries as $filename) { $class = basename($filename, '.php'); $class_var = strtolower($class); if (in_array($class_var, $_skip)) { continue; } $class_name = 'CI_' . $class; $class_var = ( ! isset($_ci_varmap[$class_var])) ? $class_var : $_ci_varmap[$class_var]; $lines[] = '$' . $class_var . ' = new ' . $class_name . '();'; } // database $lines[] = '$db = new CI_DB_active_record();'; // models foreach (glob(APPPATH . 'models/*.php') as $filename) { $class = ucfirst(basename($filename, '.php')); $class_var = $class; $class_name = $class; $lines[] = '$' . $class_var . ' = new ' . $class_name . '();'; } sort($lines); echo 'system/core/Controller.php のコンストラクタの最後に以下のコードを追加する' . "\n"; echo '<pre>' ."\n"; echo '// Eclipse コード補完のため' . "\n"; echo 'if (FALSE) {' . "\n"; foreach ($lines as $line) { echo "\t" . $line . "\n"; } echo '}' . "\n"; echo '</pre>' ."\n"; } } /* End of file eclipse.php */ /* Location: ./application/controllers/eclipse.php */
これを実行すると、Controller クラスに追加するコードを出力します。
CodeIgniter Reactor では CLI での実行も可能です。
$ php index.php eclipse
とすると、以下のように出力されます。
system/core/Controller.php のコンストラクタの最後に以下のコードを追加する <pre> // Eclipse コード補完のため if (FALSE) { $agent = new CI_User_agent(); $benchmark = new CI_Benchmark(); $calendar = new CI_Calendar(); $cart = new CI_Cart(); $config = new CI_Config(); $db = new CI_DB_active_record(); $email = new CI_Email(); $encrypt = new CI_Encrypt(); $form_validation = new CI_Form_validation(); $ftp = new CI_Ftp(); $image_lib = new CI_Image_lib(); $input = new CI_Input(); $javascript = new CI_Javascript(); $lang = new CI_Lang(); $log = new CI_Log(); $output = new CI_Output(); $pagination = new CI_Pagination(); $parser = new CI_Parser(); $security = new CI_Security(); $session = new CI_Session(); $sha1 = new CI_Sha1(); $table = new CI_Table(); $trackback = new CI_Trackback(); $typography = new CI_Typography(); $unit = new CI_Unit_test(); $upload = new CI_Upload(); $uri = new CI_URI(); $utf8 = new CI_Utf8(); $xmlrpc = new CI_Xmlrpc(); $xmlrpcs = new CI_Xmlrpcs(); $zip = new CI_Zip(); } </pre>