Tại sao PHP 8.5+?
TCPDF-Next yêu cầu PHP 8.5+ theo thiết kế. Đây không phải ràng buộc tùy ý — mọi tính năng PHP hiện đại được dùng trong thư viện trực tiếp mang lại lợi ích cho chất lượng code, bảo mật và trải nghiệm developer.
Tính năng PHP 8.5 chúng tôi dùng
| Tính năng | Lợi ích cho TCPDF-Next |
|---|---|
| Readonly class | Value object bất biến (PageSize, Margin, Color, FontInfo) — không lỗi mutation |
| Backed enum | Cấu hình type-safe (Orientation::Portrait, BarcodeType::QRCode, SignatureLevel::PAdES_B_LTA) |
| Named argument | Lời gọi API tự ghi chú — setSignature(certInfo: $cert, level: SignatureLevel::PAdES_B_B) |
| Union/intersection type | Kiểu tham số chính xác trong API |
| DNF type | Ràng buộc kiểu phức tạp cho validation nội bộ |
#[\SensitiveParameter] | Mật khẩu và private key không bao giờ xuất hiện trong stack trace (Aes256Encryptor, CertificateInfo, TsaClient) |
#[\NoDiscard] | Cảnh báo compiler nếu bỏ qua giá trị trả về từ method quan trọng (FontManager::registerFont(), FormFlattener::flatten()) |
| Property hook | Pattern getter/setter sạch không boilerplate |
| Pipe operator | Biến đổi dữ liệu nội bộ gọn gàng |
| Fiber | Nền tảng cho tạo PDF bất đồng bộ trong queue worker |
"Nhưng server tôi chạy PHP 8.1..."
Dùng Docker làm lớp cách ly. Ứng dụng của bạn có thể chạy bất kỳ phiên bản PHP nào — TCPDF-Next chạy bên trong container.
Dockerfile tối thiểu
dockerfile
FROM php:8.5-cli
# Cài extension cần thiết
RUN apt-get update && apt-get install -y \
libicu-dev libpng-dev libjpeg-dev libwebp-dev \
&& docker-php-ext-configure gd --with-jpeg --with-webp \
&& docker-php-ext-install gd intl
# Cài Composer
COPY --from=composer:latest /usr/bin/composer /usr/bin/composer
COPY . /app
WORKDIR /app
RUN composer install --no-dev --optimize-autoloaderDocker Compose cho team
yaml
services:
pdf-generator:
build: .
volumes:
- ./output:/app/output
command: php generate-pdf.phpLaravel với Docker
Nếu ứng dụng Laravel chạy PHP 8.2 nhưng cần TCPDF-Next, chạy tạo PDF dạng microservice:
yaml
services:
app:
image: php:8.2-fpm
# Ứng dụng Laravel
pdf-service:
build:
context: ./pdf-service
dockerfile: Dockerfile
image: php:8.5-cli
volumes:
- shared-output:/output
volumes:
shared-output:Hoặc dùng hệ thống queue của Laravel để dispatch tạo PDF tới worker PHP 8.5.
🐳 Docker for Legacy PHP Environments
Docker là cách tiếp cận khuyến nghị cho team không thể nâng cấp phiên bản PHP production. Quy trình tạo PDF được cách ly — đọc input, ghi file PDF và thoát. Không chia sẻ state, không lo tương thích.
Đánh đổi
Bằng cách yêu cầu PHP 8.5+, TCPDF-Next được:
- Codebase nhỏ hơn — Tính năng hiện đại thay thế hàng trăm dòng workaround
- Type safety mạnh hơn — PHPStan Level 10 không lỗi
- Bảo mật tốt hơn —
#[\SensitiveParameter]ngăn rò rỉ credential trong log - Object bất biến — Readonly class loại bỏ cả một loại bug
- Code tự ghi chú — Enum thay magic string, named argument thay positional array
Thư viện phục vụ bạn thập kỷ tới nên được xây trên tính năng ngôn ngữ của thập kỷ tới.