📖 CodeIgniter 4 Framework - Giới thiệu CodeIgniter 4 và Setup
45 phút

Giới thiệu CodeIgniter 4

CodeIgniter là gì?

CodeIgniter là framework PHP nhẹ, nhanh, dễ học, được nhiều developer Việt Nam sử dụng.

Ưu điểm

  • Nhẹ và nhanh: Ít overhead
  • Dễ học: Documentation rõ ràng
  • MVC pattern: Quen thuộc với nhiều developer
  • Không cần Composer bắt buộc: Có thể download zip
  • Built-in security: CSRF, XSS protection
  • ORM đơn giản: Query Builder

Cài đặt

Yêu cầu

  • PHP 8.1+
  • Extensions: intl, mbstring, json, mysqlnd (hoặc pdo)

Cài đặt với Composer

composer create-project codeigniter4/appstarter myapp
cd myapp

Cấu hình

# Copy env file
cp env .env

# Generate encryption key
php spark key:generate

Chạy development server

php spark serve
# Mở http://localhost:8080

Cấu trúc project

myapp/
├── app/
│   ├── Config/
│   ├── Controllers/
│   ├── Database/
│   │   ├── Migrations/
│   │   └── Seeds/
│   ├── Filters/
│   ├── Models/
│   ├── Views/
│   ├── Helpers/
│   └── Libraries/
├── public/
│   ├── index.php
│   └── .htaccess
├── system/
├── tests/
├── vendor/
├── writable/
├── .env
├── composer.json
└── spark

Controller đầu tiên

<?php

namespace App\Controllers;

use CodeIgniter\Controller;

class Blog extends BaseController
{
    public function index(): string
    {
        $data = [
            'title' => 'My Blog',
            'posts' => [
                ['id' => 1, 'title' => 'First post', 'content' => 'Hello world'],
                ['id' => 2, 'title' => 'Second post', 'content' => 'Another one'],
            ],
        ];
        return view('blog/index', $data);
    }

    public function view(int $id): string
    {
        return "Post ID: $id";
    }

    public function api(): \CodeIgniter\HTTP\ResponseInterface
    {
        return $this->response->setJSON([
            'status' => 'ok',
            'data' => ['message' => 'Hello from API'],
        ]);
    }
}

Routing

<?php
// app/Config/Routes.php

$routes->get('/', 'Home::index');
$routes->get('blog', 'Blog::index');
$routes->get('blog/(:num)', 'Blog::view/$1');

$routes->group('api/v1', ['namespace' => 'App\Controllers\Api'], function ($routes) {
    $routes->get('posts', 'PostController::index');
    $routes->get('posts/(:num)', 'PostController::show/$1');
    $routes->post('posts', 'PostController::create');
    $routes->put('posts/(:num)', 'PostController::update/$1');
    $routes->delete('posts/(:num)', 'PostController::delete/$1');
});

Views với Template

<!-- app/Views/blog/index.php -->
<!DOCTYPE html>
<html>
<head>
    <title><?= esc($title) ?></title>
</head>
<body>
    <h1><?= esc($title) ?></h1>
    <ul>
        <?php foreach ($posts as $post): ?>
            <li>
                <a href="/blog/<?= $post['id'] ?>"><?= esc($post['title']) ?></a>
            </li>
        <?php endforeach; ?>
    </ul>
</body>
</html>

Base Controller với Helpers

<?php

namespace App\Controllers;

use CodeIgniter\Controller;

abstract class BaseController extends Controller
{
    protected $helpers = ['form', 'url', 'text'];
    protected array $data = [];

    public function initController(
        \CodeIgniter\HTTP\RequestInterface $request,
        \CodeIgniter\HTTP\ResponseInterface $response,
        \Psr\Log\LoggerInterface $logger
    ): void {
        parent::initController($request, $response, $logger);
        $this->data['title'] = 'My App';
    }
}

Bài tập thực hành

Hãy tạo controller và views đầu tiên!

📝 Bài tập (1)

  1. Tạo CRUD controller cơ bản