Cơ bản về Codeignite4 CI4 (Beginner).

Mình bắt đầu với bài Cơ bản về CI4 (Beginner).


Cơ bản về CI4

1.1. Giới thiệu CI4

CI3 vs CI4

  1. CI4 viết lại hoàn toàn theo chuẩn PHP 7+ & OOP, PSR-4 autoload.
  2. spark CLI hỗ trợ tạo code nhanh.
  3. CI3 là procedural, CI4 là OOP.

⭢ Lời khuyên: nếu mới bắt đầu → học luôn CI4, không cần CI3.


1.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


1.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.


1.4. Routing cơ bản

  • 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.


1.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


1.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!


1.7. Model cơ bản

  • 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]);
    

1.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 mục 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

⭢ Bạn có muốn mình đi tiếp chi tiết Part 2: Làm việc với Database trong CI4 luôn không?

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...