Catalog / CodeIgniter 4 Cheatsheet

CodeIgniter 4 Cheatsheet

A comprehensive cheat sheet for CodeIgniter 4, covering essential concepts, configurations, and code snippets to accelerate development.

Core Concepts & Configuration

MVC Structure

Model: Represents data and business logic.

View: Handles the presentation of data to the user (HTML, etc.).

Controller: Manages requests, interacts with models, and loads views.

Directory Structure: app, system, public, writable

app - Application specific code (controllers, models, views, etc.)

system - Core CodeIgniter files (do not modify).

public - Contains the index.php file and assets (CSS, JS, images).

writable - Directory for logs, cache, and uploads.

Configuration (app/Config/App.php)

$baseURL

The base URL of your application (e.g., http://localhost:8080)

$indexPage

The name of your index page (usually index.php or empty string to remove it.)

$encryptionKey

Encryption key for secure sessions and data.

$defaultLocale

The default locale for your application (e.g., en, fr).

$sessionDriver

The session driver to use (FileHandler, DatabaseHandler, etc.).

$timezone

The timezone for your application (e.g., America/Los_Angeles).

Controllers & Routing

Creating a Controller

Create a file in app/Controllers/ (e.g., MyController.php)

<?php

namespace App\Controllers;

use CodeIgniter\Controller;

class MyController extends Controller
{
    public function index()
    {
        return 'Hello, World!';
    }
}

Access the controller via URL (e.g., http://localhost:8080/mycontroller)

Routing

app/Config/Routes.php

Configuration file for defining routes.

$routes->get('path', 'Controller::method');

Defines a GET route.

$routes->post('path', 'Controller::method');

Defines a POST route.

$routes->resource('photos');

Creates RESTful resource routes for a controller named ‘Photos’.

Route Parameters

$routes->get('users/(:num)', 'Users::show/$1');

Auto Route (Improved)

Set $routes->setAutoRoute(true); to automatically route based on controller and method names.

Request Object

Accessing the request object in a controller:

$request = \Config\Services::request();
$data = $request->getPost(); // Get POST data
$data = $request->getGet();  // Get GET data
$userAgent = $request->getUserAgent();
$ipAddress = $request->getIPAddress();

Models & Database

Creating a Model

Create a file in app/Models/ (e.g., UserModel.php)

<?php

namespace App\Models;

use CodeIgniter\Model;

class UserModel extends Model
{
    protected $table      = 'users';
    protected $primaryKey = 'id';

    protected $useAutoIncrement = true;

    protected $returnType     = 'array';
    protected $useSoftDeletes = true;

    protected $allowedFields = ['name', 'email'];

    protected $useTimestamps = true;
    protected $createdField  = 'created_at';
    protected $updatedField  = 'updated_at';
    protected $deletedField  = 'deleted_at';

    protected $validationRules    = [];
    protected $validationMessages = [];
    protected $skipValidation     = false;
}

Database Configuration (app/Config/Database.php)

$default

Default database connection settings.

hostname

Database server hostname (e.g., localhost).

username

Database username.

password

Database password.

database

Database name.

DBDriver

Database driver (e.g., MySQLi, Postgre, SQLite3).

Database Queries

$db = \Config\Database::connect();

// Simple query
$query = $db->query('SELECT * FROM users');

foreach ($query->getResult() as $row) {
    echo $row->name;
}

// Using Query Builder
$builder = $db->table('users');
$builder->select('id, name, email');
$query = $builder->get();
// Insert data
$data = [
    'name' => 'John Doe',
    'email'  => '[email protected]',
];
$builder->insert($data);

// Update data
$data = ['email' => '[email protected]'];
$builder->where('id', 1);
$builder->update($data);

Views & Templating

Creating a View

Create a file in app/Views/ (e.g., welcome_message.php)

<!DOCTYPE html>
<html>
<head>
    <title>Welcome</title>
</head>
<body>
    <h1>Hello, <?php echo $name; ?>!</h1>
</body>
</html>

Loading Views in Controller

<?php

namespace App\Controllers;

use CodeIgniter\Controller;

class Home extends Controller
{
    public function index()
    {
        $data = ['name' => 'CodeIgniter'];
        return view('welcome_message', $data);
    }
}

Templating with View Layouts

Create a layout file (e.g., app/Views/layouts/default.php):

<!DOCTYPE html>
<html>
<head>
    <title><?php echo $title; ?></title>
</head>
<body>
    <?= $this->renderSection('content') ?>
</body>
</html>

Create a view that extends the layout (e.g., app/Views/home.php):

<?= $this->extend('layouts/default') ?>

<?= $this->section('content') ?>
    <h1>Welcome Home!</h1>
<?= $this->endSection() ?>

In Controller:

public function index()
{
    $data['title'] = 'Home Page';
    return view('home', $data);
}