0

PHP và MySQL Bài 32: Composer - Trái tim của các dự án PHP hiện đại và Phép thuật Autoloading

Nếu trong thế giới Node.js có NPM, hay trong Golang có Go Modules, thì trong hệ sinh thái PHP, chúng ta có Composer. Đây là công cụ quản lý gói (Dependency Manager) tiêu chuẩn mà bất kỳ dự án PHP chuyên nghiệp nào cũng bắt buộc phải sử dụng.


1. Composer giải quyết bài toán gì?

Giả sử bạn cần làm tính năng xuất báo cáo Excel, gửi email và giải mã JWT [cite: x].

  • Cách "đồ đá": Tải file ZIP của thư viện PHPExcel, PHPMailer, PHP-JWT. Giải nén vào thư mục dự án. Dùng lệnh require mỏi tay hàng chục file. Nếu các thư viện này yêu cầu thêm thư viện con khác, bạn lại phải đi tải tiếp. Lên môi trường Production, việc quản lý phiên bản (version) trở thành ác mộng [cite: x].
  • Cách hiện đại (Composer): Bạn chỉ cần gõ một dòng lệnh, Composer sẽ tự động lên kho lưu trữ trung tâm (Packagist.org), tải đúng thư viện đó, tự động tải luôn các thư viện con đi kèm, và tự động cấu hình để bạn có thể sử dụng ngay lập tức [cite: x].

2. Khởi tạo dự án với Composer

Sau khi tải và cài đặt Composer vào máy tính, bạn mở Terminal tại thư mục gốc của dự án (mini-cms) và gõ [cite: x]:

composer init

Lệnh này sẽ hỏi bạn một vài thông tin về dự án (tên, tác giả, mô tả) và cuối cùng tạo ra một file cốt lõi: composer.json [cite: x].

File này đóng vai trò như một "bản lý lịch" khai báo mọi thư viện mà dự án của bạn cần dùng [cite: x].


3. Cài đặt thư viện thực tế (Ví dụ: PHP-JWT)

Để cài đặt thư viện giải mã Token bảo mật cho Bài 31, bạn chỉ cần gõ lệnh [cite: x]:

composer require firebase/php-jwt

Ngay lập tức, 3 điều kỳ diệu sẽ xảy ra trong thư mục của bạn [cite: x]:

  1. File composer.json tự động cập nhật thêm dòng "firebase/php-jwt": "^6.4" vào danh sách phụ thuộc [cite: x].
  2. Composer tạo ra một thư mục lớn tên là vendor/. Toàn bộ mã nguồn của thư viện sẽ được tải và giấu vào trong này [cite: x].
  3. Composer tạo ra file composer.lock. File này chốt cứng phiên bản chính xác của thư viện (ví dụ: chốt đúng bản 6.4.0) để đảm bảo khi đẩy code lên Server thật, hệ thống không tự động cập nhật lên bản mới gây lỗi tương thích [cite: x].

4. Phép thuật Autoloading chuẩn PSR-4

Điều tuyệt vời nhất của Composer không chỉ là tải file, mà là hệ thống Autoload (Tự động nạp) [cite: x].

Thay vì phải viết hàng chục dòng require_once ở đầu mỗi file PHP để gọi Model, Controller hay Thư viện, Composer tạo ra một file duy nhất làm nhiệm vụ "triệu hồi" mọi thứ [cite: x].

Ở file index.php (Front Controller) của bạn, hãy xóa sạch các lệnh require_once rườm rà đi và chỉ cần chèn ĐÚNG MỘT DÒNG DUY NHẤT lên trên cùng [cite: x]:

<?php
// Triệu hồi toàn bộ sức mạnh của các thư viện bên thứ 3
require 'vendor/autoload.php';

use Firebase\JWT\JWT;
use Firebase\JWT\Key;

// Giờ đây bạn có thể dùng Class JWT thoải mái mà không cần require file chứa nó
$decoded = JWT::decode($token, new Key('SECRET_KEY', 'HS256'));
?>

Thậm chí, bạn có thể thiết lập file composer.json để nó tự động nạp luôn các thư mục controllersmodels do chính bạn viết (theo chuẩn PSR-4), giải phóng bạn hoàn toàn khỏi việc quản lý đường dẫn file [cite: x].


5. Nguyên tắc sinh tử với Git (Bảo vệ băng thông)

Thư mục vendor/ chứa hàng ngàn file mã nguồn của người khác và dung lượng có thể lên tới hàng chục, hàng trăm MB [cite: x].

⚠️ Tuyệt đối không bao giờ đẩy thư mục vendor/ lên Git (Github/Gitlab).

Bạn phải tạo một file .gitignore ở thư mục gốc và thêm dòng này vào để Git bỏ qua nó [cite: x]:

/vendor/

Vậy khi đẩy code lên Server hoặc đồng nghiệp clone code về thì làm sao chạy được?

Họ chỉ cần lấy file composer.jsoncomposer.lock về, sau đó gõ lệnh [cite: x]:

composer install

Composer sẽ tự động nhìn vào file .lock và tải lại y xì đúc toàn bộ thư mục vendor/ cho môi trường mới trong vài giây [cite: x].


Tổng kết

Nắm vững Composer, bạn chính thức thoát khỏi tư duy viết code thủ công để bước chân vào thế giới phát triển phần mềm chuyên nghiệp [cite: x]. Mọi hệ thống hiện đại, mọi bộ thư viện kết nối Database phức tạp hay các quy trình Queue/Job đều được phân phối qua đây [cite: x].

Đặc biệt, nền tảng Autoloading của Composer chính là xương sống để xây dựng lên các Framework khổng lồ [cite: x].


All Rights Reserved

Viblo
Let's register a Viblo Account to get more interesting posts.