I'm using IntelliJ IDEA 12 to develop a PHP web application using the CodeIgniter framework. Due to the way CI instantiates objects and methods, IDEA thinks they don't exist when they're called:
As you can see, I get those annoying orange squigglies under every single CodeIgniter class/method I try to use.
Here's the code for the CI_Controller
class, giving some insight into how they're creating the objects:
class CI_Controller {
private static $instance;
/**
* Constructor
*/
public function __construct()
{
self::$instance =& $this;
// Assign all the class objects that were instantiated by the
// bootstrap file (CodeIgniter.php) to local class variables
// so that CI can run as one big super object.
foreach (is_loaded() as $var => $class)
{
$this->$var =& load_class($class);
}
$this->load =& load_class('Loader', 'core');
$this->load->initialize();
log_message('debug', "Controller Class Initialized");
}
public static function &get_instance()
{
return self::$instance;
}
}
Is there any way I can get IntelliJ IDEA to either ignore these errors (but not other errors), or get it to find the objects on its own?
Note: I used to use PHPStorm, a PHP IDE build on the IntelliJ IDEA platform, and it did the same thing when it came to CodeIgniter.
I solved this by following this guide. It was meant for PHPStorm but works for IntelliJ IDEA as well (probably WebStorm too!). It was very simple, actually. A basic recap:
- Saved the following PHP code in my project root. It's basically just a PHPDoc comment:
<?php die('This file is not really here!');
/**
* ------------- DO NOT UPLOAD THIS FILE TO LIVE SERVER ---------------------
*
* Implements code completion for CodeIgniter in phpStorm
* phpStorm indexes all class constructs, so if this file is in the project it will be loaded.
* -------------------------------------------------------------------
* Drop the following file into a CI project in phpStorm
* You can put it in the project root and phpStorm will load it.
* (If phpStorm doesn't load it, try closing the project and re-opening it)
*
* Under system/core/
* Right click on Controller.php and set Mark as Plain Text
* Do the same for Model.php
* -------------------------------------------------------------------
* This way there is no editing of CI core files for this simple layer of code completion.
*
* PHP version 5
*
* LICENSE: GPL http://www.gnu.org/copyleft/gpl.html
*
* Created 1/28/12, 11:06 PM
*
* @category
* @package CodeIgniter CI_phpStorm.php
* @author Jeff Behnke
* @copyright 2009-11 Valid-Webs.com
* @license GPL http://www.gnu.org/copyleft/gpl.html
* @version 2012.01.28
*/
/**
* @property CI_DB_active_record $db This is the platform-independent base Active Record implementation class.
* @property CI_DB_forge $dbforge Database Utility Class
* @property CI_Benchmark $benchmark This class enables you to mark points and calculate the time difference between them.
Memory consumption can also be displayed.
* @property CI_Calendar $calendar This class enables the creation of calendars
* @property CI_Cart $cart Shopping Cart Class
* @property CI_Config $config This class contains functions that enable config files to be managed
* @property CI_Controller $controller This class object is the super class that every library in.
CodeIgniter will be assigned to.
* @property CI_Email $email Permits email to be sent using Mail, Sendmail, or SMTP.
* @property CI_Encrypt $encrypt Provides two-way keyed encoding using XOR Hashing and Mcrypt
* @property CI_Exceptions $exceptions Exceptions Class
* @property CI_Form_validation $form_validation Form Validation Class
* @property CI_Ftp $ftp FTP Class
* @property CI_Hooks $hooks Provides a mechanism to extend the base system without hacking.
* @property CI_Image_lib $image_lib Image Manipulation class
* @property CI_Input $input Pre-processes global input data for security
* @property CI_Lang $lang Language Class
* @property CI_Loader $load Loads views and files
* @property CI_Log $log Logging Class
* @property CI_Model $model CodeIgniter Model Class
* @property CI_Output $output Responsible for sending final output to browser
* @property CI_Pagination $pagination Pagination Class
* @property CI_Parser $parser Parses pseudo-variables contained in the specified template view,
replacing them with the data in the second param
* @property CI_Profiler $profiler This class enables you to display benchmark, query, and other data
in order to help with debugging and optimization.
* @property CI_Router $router Parses URIs and determines routing
* @property CI_Session $session Session Class
* @property CI_Sha1 $sha1 Provides 160 bit hashing using The Secure Hash Algorithm
* @property CI_Table $table HTML table generation
Lets you create tables manually or from database result objects, or arrays.
* @property CI_Trackback $trackback Trackback Sending/Receiving Class
* @property CI_Typography $typography Typography Class
* @property CI_Unit_test $unit_test Simple testing class
* @property CI_Upload $upload File Uploading Class
* @property CI_URI $uri Parses URIs and determines routing
* @property CI_User_agent $user_agent Identifies the platform, browser, robot, or mobile devise of the browsing agent
* @property CI_Validation $validation //dead
* @property CI_Xmlrpc $xmlrpc XML-RPC request handler class
* @property CI_Xmlrpcs $xmlrpcs XML-RPC server class
* @property CI_Zip $zip Zip Compression Class
* @property CI_Javascript $javascript Javascript Class
* @property CI_Jquery $jquery Jquery Class
* @property CI_Utf8 $utf8 Provides support for UTF-8 environments
* @property CI_Security $security Security Class, xss, csrf, etc...
*/
class CI_Controller{}
/**
* @property CI_DB_active_record $db This is the platform-independent base Active Record implementation class.
* @property CI_DB_forge $dbforge Database Utility Class
* @property CI_Benchmark $benchmark This class enables you to mark points and calculate the time difference between them.
Memory consumption can also be displayed.
* @property CI_Calendar $calendar This class enables the creation of calendars
* @property CI_Cart $cart Shopping Cart Class
* @property CI_Config $config This class contains functions that enable config files to be managed
* @property CI_Controller $controller This class object is the super class that every library in.
CodeIgniter will be assigned to.
* @property CI_Email $email Permits email to be sent using Mail, Sendmail, or SMTP.
* @property CI_Encrypt $encrypt Provides two-way keyed encoding using XOR Hashing and Mcrypt
* @property CI_Exceptions $exceptions Exceptions Class
* @property CI_Form_validation $form_validation Form Validation Class
* @property CI_Ftp $ftp FTP Class
* @property CI_Hooks $hooks Provides a mechanism to extend the base system without hacking.
* @property CI_Image_lib $image_lib Image Manipulation class
* @property CI_Input $input Pre-processes global input data for security
* @property CI_Lang $lang Language Class
* @property CI_Loader $load Loads views and files
* @property CI_Log $log Logging Class
* @property CI_Model $model CodeIgniter Model Class
* @property CI_Output $output Responsible for sending final output to browser
* @property CI_Pagination $pagination Pagination Class
* @property CI_Parser $parser Parses pseudo-variables contained in the specified template view,
replacing them with the data in the second param
* @property CI_Profiler $profiler This class enables you to display benchmark, query, and other data
in order to help with debugging and optimization.
* @property CI_Router $router Parses URIs and determines routing
* @property CI_Session $session Session Class
* @property CI_Sha1 $sha1 Provides 160 bit hashing using The Secure Hash Algorithm
* @property CI_Table $table HTML table generation
Lets you create tables manually or from database result objects, or arrays.
* @property CI_Trackback $trackback Trackback Sending/Receiving Class
* @property CI_Typography $typography Typography Class
* @property CI_Unit_test $unit_test Simple testing class
* @property CI_Upload $upload File Uploading Class
* @property CI_URI $uri Parses URIs and determines routing
* @property CI_User_agent $user_agent Identifies the platform, browser, robot, or mobile devise of the browsing agent
* @property CI_Validation $validation //dead
* @property CI_Xmlrpc $xmlrpc XML-RPC request handler class
* @property CI_Xmlrpcs $xmlrpcs XML-RPC server class
* @property CI_Zip $zip Zip Compression Class
* @property CI_Javascript $javascript Javascript Class
* @property CI_Jquery $jquery Jquery Class
* @property CI_Utf8 $utf8 Provides support for UTF-8 environments
* @property CI_Security $security Security Class, xss, csrf, etc...
*/
class CI_Model{}
2. Found /system/core/controller.php
and /system/core/model.php
inside of IntelliJ IDEA and right clicked->Mark as Plain Text.
3. Done! It works great, no more false errors, and code completion!
This is the solution that worked for me: https://github.com/Stunt/Codeigniter-autocomplete/
I'm using phpStorm but I imagine it would work with IDEA.
No need to mark files as plain text. Just drop the autocomplete.php file into the application/config folder and it works. I doubt the link at github will go bad but just in case here is the content of the file.
<?php
// help IDE(s) support Codeigniter 2.0
/**
* @property CI_DB_active_record $db
* @property CI_DB_forge $dbforge
* @property CI_Benchmark $benchmark
* @property CI_Calendar $calendar
* @property CI_Cart $cart
* @property CI_Config $config
* @property CI_Controller $controller
* @property CI_Email $email
* @property CI_Encrypt $encrypt
* @property CI_Exceptions $exceptions
* @property CI_Form_validation $form_validation
* @property CI_Ftp $ftp
* @property CI_Hooks $hooks
* @property CI_Image_lib $image_lib
* @property CI_Input $input
* @property CI_Language $language
* @property CI_Loader $load
* @property CI_Log $log
* @property CI_Model $model
* @property CI_Output $output
* @property CI_Pagination $pagination
* @property CI_Parser $parser
* @property CI_Profiler $profiler
* @property CI_Router $router
* @property CI_Session $session
* @property CI_Sha1 $sha1
* @property CI_Table $table
* @property CI_Trackback $trackback
* @property CI_Typography $typography
* @property CI_Unit_test $unit_test
* @property CI_Upload $upload
* @property CI_URI $uri
* @property CI_User_agent $user_agent
* @property CI_Validation $validation
* @property CI_Xmlrpc $xmlrpc
* @property CI_Xmlrpcs $xmlrpcs
* @property CI_Zip $zip
*
*
*
* These are samples entries to make my own functions work.
* Remove these and add you custom ones.
* @property Tank_auth $tank_auth
* @property Users_model $users_model
* @property Firms_model $firms_model
* @property Firms_model_master $firms_model_master
*
*
*/
class CI_Controller {};
class MY_Controller extends CI_Controller {};
/**
* @property CI_DB_active_record $db
* @property CI_DB_forge $dbforge
* @property CI_Config $config
* @property CI_Loader $load
* @property CI_Session $session
*/
class CI_Model {};
/* End of file autocomplete.php */
/* Location: ./application/config/autocomplete.php */
?>
UPDATE for CIv3: If you are using CodeIgniter V 3.x, use this instead.
<?php
/**
* @property CI_DB_query_builder|CI_DB_postgre_driver $db This is the platform-independent base Active Record implementation class.
* @property CI_DB_forge $dbforge Database Utility Class
* @property CI_Benchmark $benchmark This class enables you to mark points and calculate the time difference between them.<br /> Memory consumption can also be displayed.
* @property CI_Calendar $calendar This class enables the creation of calendars
* @property CI_Cart $cart Shopping Cart Class
* @property CI_Config $config This class contains functions that enable config files to be managed
* @property CI_Controller $controller This class object is the super class that every library in.<br />CodeIgniter will be assigned to.
* @property CI_Email $email Permits email to be sent using Mail, Sendmail, or SMTP.
* @property CI_Encrypt $encrypt Provides two-way keyed encoding using XOR Hashing and Mcrypt
* @property CI_Exceptions $exceptions Exceptions Class
* @property CI_Form_validation $form_validation Form Validation Class
* @property CI_Ftp $ftp FTP Class
* @property CI_Hooks $hooks Provides a mechanism to extend the base system without hacking.
* @property CI_Image_lib $image_lib Image Manipulation class
* @property CI_Input $input Pre-processes global input data for security
* @property CI_Lang $lang Language Class
* @property CI_Loader $load Loads views and files
* @property CI_Log $log Logging Class
* @property CI_Model $model CodeIgniter Model Class
* @property CI_Output $output Responsible for sending final output to browser
* @property CI_Pagination $pagination Pagination Class
* @property CI_Parser $parser Parses pseudo-variables contained in the specified template view,<br />replacing them with the data in the second param
* @property CI_Profiler $profiler This class enables you to display benchmark, query, and other data<br />in order to help with debugging and optimization.
* @property CI_Router $router Parses URIs and determines routing
* @property CI_Session $session Session Class
* @property CI_Encryption $encryption The Encryption Library provides two-way data encryption
* @property CI_Table $table HTML table generation<br />Lets you create tables manually or from database result objects, or arrays.
* @property CI_Trackback $trackback Trackback Sending/Receiving Class
* @property CI_Typography $typography Typography Class
* @property CI_Unit_test $unit_test Simple testing class
* @property CI_Upload $upload File Uploading Class
* @property CI_URI $uri Parses URIs and determines routing
* @property CI_User_agent $user_agent Identifies the platform, browser, robot, or mobile devise of the browsing agent
* @property CI_Form_validation $validation
* @property CI_Xmlrpc $xmlrpc XML-RPC request handler class
* @property CI_Xmlrpcs $xmlrpcs XML-RPC server class
* @property CI_Zip $zip Zip Compression Class
* @property CI_Javascript $javascript Javascript Class
* @property CI_Jquery $jquery Jquery Class
* @property CI_Utf8 $utf8 Provides support for UTF-8 environments
* @property CI_Security $security Security Class, xss, csrf, etc...
* @property Tank_auth $tank_auth
*
*/
class CI_Controller{}
class MY_Controller extends CI_Controller {};
/**
* @property CI_DB_query_builder|CI_DB_postgre_driver $db This is the platform-independent base Active Record implementation class.
* @property CI_DB_forge $dbforge Database Utility Class
* @property CI_Benchmark $benchmark This class enables you to mark points and calculate the time difference between them.<br /> Memory consumption can also be displayed.
* @property CI_Calendar $calendar This class enables the creation of calendars
* @property CI_Cart $cart Shopping Cart Class
* @property CI_Config $config This class contains functions that enable config files to be managed
* @property CI_Controller $controller This class object is the super class that every library in.<br />CodeIgniter will be assigned to.
* @property CI_Email $email Permits email to be sent using Mail, Sendmail, or SMTP.
* @property CI_Encrypt $encrypt Provides two-way keyed encoding using XOR Hashing and Mcrypt
* @property CI_Exceptions $exceptions Exceptions Class
* @property CI_Form_validation $form_validation Form Validation Class
* @property CI_Ftp $ftp FTP Class
* @property CI_Hooks $hooks Provides a mechanism to extend the base system without hacking.
* @property CI_Image_lib $image_lib Image Manipulation class
* @property CI_Input $input Pre-processes global input data for security
* @property CI_Lang $lang Language Class
* @property CI_Loader $load Loads views and files
* @property CI_Log $log Logging Class
* @property CI_Model $model CodeIgniter Model Class
* @property CI_Output $output Responsible for sending final output to browser
* @property CI_Pagination $pagination Pagination Class
* @property CI_Parser $parser Parses pseudo-variables contained in the specified template view,<br />replacing them with the data in the second param
* @property CI_Profiler $profiler This class enables you to display benchmark, query, and other data<br />in order to help with debugging and optimization.
* @property CI_Router $router Parses URIs and determines routing
* @property CI_Session $session Session Class
* @property CI_Encryption $encryption The Encryption Library provides two-way data encryption
* @property CI_Table $table HTML table generation<br />Lets you create tables manually or from database result objects, or arrays.
* @property CI_Trackback $trackback Trackback Sending/Receiving Class
* @property CI_Typography $typography Typography Class
* @property CI_Unit_test $unit_test Simple testing class
* @property CI_Upload $upload File Uploading Class
* @property CI_URI $uri Parses URIs and determines routing
* @property CI_User_agent $user_agent Identifies the platform, browser, robot, or mobile devise of the browsing agent
* @property CI_Form_validation $validation
* @property CI_Xmlrpc $xmlrpc XML-RPC request handler class
* @property CI_Xmlrpcs $xmlrpcs XML-RPC server class
* @property CI_Zip $zip Zip Compression Class
* @property CI_Javascript $javascript Javascript Class
* @property CI_Jquery $jquery Jquery Class
* @property CI_Utf8 $utf8 Provides support for UTF-8 environments
* @property CI_Security $security Security Class, xss, csrf, etc...
* @property Tank_auth $tank_auth
*/
class CI_Model {};
I cannot take credit for all of this. I found a lot of these but do not recall where. I did need to add some to make it complete though.