CodeIgniter 4 implements a robust autoloading mechanism adhering to the PSR-4 standard, which simplifies loading files, classes, or namespaces without manually including them in your scripts. This system is designed for efficiency and modularity, allowing developers to easily manage dependencies.
How It Works:
1. PSR-4 Autoloading CodeIgniter 4 uses a PSR-4-compliant autoloader. When a class is instantiated, the autoloader maps the class namespace to the corresponding directory structure and automatically includes the necessary file.
- For example, a class named
App\Controllers\Home
corresponds to the file:
app/Controllers/Home.php
2. Configuration in Autoload.php
Autoloading is configured in the app/Config/Autoload.php
file. This file defines mappings for:
- Namespaces: Maps namespaces to directory paths.
- Classmap: Specifies exact class-to-file mappings.
- Helper Functions: Loads helper files globally.
3. Namespace Mapping The $psr4
property in Autoload.php
maps namespaces to directories. When a class from a namespace is called, the autoloader automatically looks up the directory path.
public $psr4 = [
'App' => APPPATH, // Default namespace
'Config' => APPPATH . 'Config',
'Custom' => ROOTPATH . 'custom', // Custom namespace mapping
];
4. Classmap The $classmap
property is used for direct mapping of class names to file paths, bypassing the namespace lookup.
public $classmap = [
'CustomClass' => APPPATH . 'Libraries/CustomClass.php',
];
5. Helpers and Libraries CodeIgniter also allows you to autoload specific helpers, libraries, or packages in the app/Config/Autoload.php
file.
public $helpers = ['url', 'form']; // Autoload URL and form helpers
public $libraries = ['session']; // Autoload session library
6. Custom Helpers or Libraries Custom helper or library files can be placed in app/Helpers
or app/Libraries
and added to the respective autoload arrays.
How to Delete Cached Data
Once stored, the cached data never expire.
So if you add or remove files or change existing file paths, or namespaces, old cached data will be returned and your app may not work properly.
In that case, you must manually delete the cache file. If you add a CodeIgniter package via Composer, you also need to delete the cache file.
You can use the spark cache:clear
command:
php spark cache:clear
OR
simply delete the writable/cache/FileLocatorCache file.
php spark cache:clear
Execution Flow
- When a file or class is referenced, the autoloader checks the
$psr4
mappings to find the appropriate directory. - If the class is not found in the namespaces, it checks the
$classmap
for a direct path. - The file is loaded, and the class or function becomes available for use.
Advantages of Autoloading
- Efficiency: No need to include files manually in each controller or method.
- Scalability: Simplifies the management of large applications with multiple dependencies.
- PSR-4 Compliance: Ensures compatibility with modern PHP standards and third-party packages.
- Customizability: Supports custom namespaces and class mappings for flexibility.