Bài 1: Cài đặt, Routing, Controller, Model

Cơ bản về CI4

Trong bài viết này, chúng ta sẽ tìm hiểu CodeIgniter 4 cơ bản – phiên bản mới được viết lại hoàn toàn theo chuẩn PHP 7+ và lập trình hướng đối tượng (OOP). Đây là lựa chọn lý tưởng cho những ai mới học framework PHP.


1. Giới thiệu CodeIgniter 4

So sánh CI3 vs CI4

  • CI4 viết lại toàn bộ, tuân thủ chuẩn PHP 7+ & OOP, hỗ trợ PSR-4 autoload.

  • Có công cụ spark CLI giúp tạo code nhanh.

  • CI3 dùng phong cách procedural, trong khi CI4 hoàn toàn OOP.

Lời khuyên: Người mới học nên bắt đầu ngay với CodeIgniter 4 cơ bản, không cần học CI3.


2. Cài đặt CI4

  • Yêu cầu môi trường
    • PHP ≥ 7.4 (khuyến nghị PHP 8.1+)
    • Composer
    • Database: MySQL/MariaDB (Postgres, SQLite cũng được)
  • Cài đặt bằng Composer
    composer create-project codeigniter4/appstarter ci4-app
    cd ci4-app
    php spark serve
    

    → Truy cập: http://localhost:8080


3. Cấu trúc thư mục CI4

ci4-app/
│── app/            # Code chính (Controller, Model, View)
│── public/         # Nơi chứa index.php (điểm vào)
│── writable/       # Cache, logs, session
│── system/         # Core framework
│── .env            # Config môi trường
│── spark           # CLI tool

⭢ Quan trọng nhất: app/ chính là nơi chúng ta code.


4. Routing

  • File: app/Config/Routes.php
  • Ví dụ:
    $routes->get('/', 'Home::index'); // GET / 
    $routes->get('/about', 'Page::about'); // GET /about 
    $routes->post('/contact', 'Form::send'); // POST /contact

⭢ Mỗi route map tới Controller@Method.


5. Controller

  • Tạo controller:
    php spark make:controller Hello
  • File app/Controllers/Hello.php
    namespace App\Controllers;
    
    class Hello extends BaseController
    {
        public function index()
        {
            return "Hello World from CI4!";
        }
    }
    

⭢ Truy cập: http://localhost:8080/hello


6. View

  • Lưu file ở: app/Views/hello.php
    <h1>Hello, <?= $name; ?>!</h1>
    
  • Trong Controller:
    return view('hello', ['name' => 'Thanh']);
    

⭢ Kết quả: Hello, Thanh!


7. Model

  • Tạo model:
    php spark make:model PostModel
    
  • File app/Models/PostModel.php
    namespace App\Models;
    use CodeIgniter\Model;
    
    class PostModel extends Model
    {
        protected $table = 'posts';
        protected $primaryKey = 'id';
        protected $allowedFields = ['title', 'content'];
    }
    
  • Sử dụng trong Controller:
    $postModel = new \App\Models\PostModel();
    $posts = $postModel->findAll();
    return view('posts/index', ['posts' => $posts]);
    

8. Migration & Seeder

  • Migration tạo bảng:
    php spark make:migration CreatePostsTable
    
  • File app/Database/Migrations/xxxx_CreatePostsTable.php
    public function up()
    {
        $this->forge->addField([
            'id' => [
                'type' => 'INT',
                'unsigned' => true,
                'auto_increment' => true
            ],
            'title' => ['type' => 'VARCHAR', 'constraint' => 255],
            'content' => ['type' => 'TEXT'],
            'created_at' => ['type' => 'DATETIME', 'null' => true],
            'updated_at' => ['type' => 'DATETIME', 'null' => true],
        ]);
        $this->forge->addKey('id', true);
        $this->forge->createTable('posts');
    }
    
  • Chạy migration:
    php spark migrate
    
  • Seeder (fake data):
    php spark make:seeder PostSeeder
    
    public function run()
    {
        $data = [
            'title' => 'Hello CI4',
            'content' => 'Bài viết đầu tiên',
        ];
        $this->db->table('posts')->insert($data);
    }
    

    Chạy seeder:

    php spark db:seed PostSeeder
    

✅ Sau bài 1, bạn sẽ biết:

  • Cài đặt CI4
  • Hiểu cấu trúc project
  • Routing → Controller → View → Model → Database (CRUD cơ bản)
  • Migration & Seeder để quản lý database

“Xem thêm: Roadmap CodeIgniter 4”.

Tham khảo: Tài liệu CodeIgniter 4

Thành Nguyễn

Tôi là Thành, nên tôi đặt tên blog là Thành Nè, Thánh Né... là một coder cùi bắp (Code quèn). Chẳng giỏi viết lách, chỉ giỏi chém gió và có sở thích chia sẻ những kiến thức tôi đã từng...