Khởi động và phát hiện NextPDF trong CodeIgniter
Tổng quan nhanh
Phần tiêu đề “Tổng quan nhanh”CodeIgniter 4 phát hiện lớp Services, các helper và registrar của gói thông qua cơ chế phát hiện gói của Composer. Trang này giải thích trình tự đó và phần cấu hình chi phối nó.
Cách hoạt động của cơ chế phát hiện Services trong CodeIgniter
Phần tiêu đề “Cách hoạt động của cơ chế phát hiện Services trong CodeIgniter”CodeIgniter 4 phân giải một service bằng cách quét từng lớp Config\Services đã phát hiện để tìm phương thức tĩnh khớp với tên service được yêu cầu. Khi ứng dụng của bạn gọi service('pdf'), framework tìm lớp Services đầu tiên đã phát hiện có khai báo phương thức pdf, rồi gọi phương thức đó.
Cơ chế phát hiện do Config\Modules điều khiển:
$enabled— công tắc chính cho tính năng tự động phát hiện. Mặc định làtrue.$discoverInComposer— mở rộng cơ chế phát hiện sang các gói Composer. Mặc định làtrue. Cờ này cho phép framework tìm thấynextpdf/codeigniter.$composerPackages— một bộ lọconly/excludetùy chọn cho tập hợp các gói Composer.$aliases— các loại phần tử tham gia vào cơ chế phát hiện. Mặc định của framework bao gồmservicesvàregistrars, và gói này dùng cả hai.
Lớp của gói là NextPDF\CodeIgniter\Config\Services. Composer ánh xạ tiền tố PHP Standards Recommendation 4 (PSR-4) NextPDF\CodeIgniter\ tới src/CodeIgniter/. Tên lớp đầy đủ phải có namespace cấp cao nhất (PSR-4 §x1.x2.p5, động từ tình thái MUST). Tiền tố namespace ánh xạ tới thư mục cơ sở, vì vậy lớp được phân giải đến tệp tương ứng của nó (PSR-4 §x1.x3).
Trình tự khởi động
Phần tiêu đề “Trình tự khởi động”- Composer autoload. Composer đăng ký bản đồ PSR-4 và các mục autoload
files. Ở bước này, Composer nạp tệp helpersrc/CodeIgniter/Helpers/pdf_helper.php. - Khởi tạo framework. CodeIgniter đọc
Config\Modules. Khi cơ chế phát hiện được bật, framework xây dựng danh sách các phần tử đã phát hiện trong các gói Composer. - Phát hiện Registrar. Framework thu thập các lớp
Registrar. HàmRegistrar::Autoload()của gói đăng ký helperpdfvới trình nạp helper của CodeIgniter. - Phân giải service ở lần gọi đầu tiên. Các factory của service được khởi tạo theo cơ chế lazy. Lần gọi đầu tiên tới
service('pdf')hoặcServices::pdf()sẽ chạy factory. Các service dùng chung được lưu vào bộ nhớ đệm trong locator suốt tiến trình.
Liên kết container
Phần tiêu đề “Liên kết container”CodeIgniter 4 không cung cấp container PSR-11. Thay vào đó, các phương thức factory tĩnh trên lớp Services đóng vai trò như các liên kết. Mỗi phương thức nhận tham số bool $getShared:
| Service | Dùng chung theo mặc định | Ghi chú |
|---|---|---|
fontRegistry | có | Được làm nóng trước, sau đó khóa lại. |
imageRegistry | có | Bộ nhớ đệm theo cơ chế ít dùng gần đây nhất (LRU) có giới hạn. |
documentFactory | có | Không giữ trạng thái. |
pdfDocument | không | Tạo mới ở mỗi lần gọi. |
pdf | không | Tạo mới ở mỗi lần gọi. |
tsaClient | có | null khi không có URL của Time-Stamp Authority (TSA) nào được cấu hình. |
pdfSigner | không | null khi việc ký bị tắt. |
Các thực thể dùng chung nằm trong bộ nhớ đệm thực thể BaseService của CodeIgniter trong suốt tiến trình. Hạ tầng kiểm thử của framework xóa bộ nhớ đệm đó bằng BaseService::reset(), và các bài kiểm thử chức năng của gói dựa vào thao tác đặt lại này giữa các trường hợp.
Thứ tự phân giải cấu hình
Phần tiêu đề “Thứ tự phân giải cấu hình”Cấu hình hiệu lực được phân giải theo thứ tự này:
- Giá trị mặc định của gói trong
NextPDF\CodeIgniter\Config\NextPdf. - Một lớp ứng dụng
Config\NextPdfkế thừa lớp của gói, khi có. CodeIgniter nạp lớp đó thay cho giá trị mặc định của gói. - Các giá trị ghi đè từ môi trường được
BaseConfigáp dụng, dùng tên lớp ngắn viết thườngnextpdflàm khóa (khóa lồng nhau theo dấu chấm, hoặc dạng tên lớp đầy đủ).
Tệp mở rộng cấu hình của ứng dụng khai báo một lớp và không tạo tác dụng phụ. Điều đó giữ cho tệp tuân theo kỳ vọng của PSR-1: một tệp hoặc khai báo các ký hiệu, hoặc chạy logic gây tác dụng phụ, chứ không làm cả hai (PSR-1 §x1.x1.p3). Tệp helper là phần đối ứng được chủ ý thiết kế để gây tác dụng phụ. Nó khai báo các hàm toàn cục pdf() và pdf_document(), và mỗi hàm được bảo vệ bằng một kiểm tra function_exists để việc nạp hai lần vẫn an toàn.
Chẩn đoán
Phần tiêu đề “Chẩn đoán”composer dump-autoload— xây dựng lại bản đồ PSR-4 và danh sách autoloadfilessau khi nâng cấp.- Để kiểm tra nhanh cơ chế phát hiện, hãy dùng một controller gọi
Services::pdfDocument(false)và xác nhận kết quả trả về là mộtDocument. - Kiểm tra
vendor/composer/autoload_files.phpđể xác nhận tệp helper đã được đăng ký. - Xem /integrations/codeigniter/troubleshooting/ để biết cách ánh xạ lỗi tới nguyên nhân.
Tuân thủ
Phần tiêu đề “Tuân thủ”- Tên lớp đầy đủ yêu cầu một namespace cấp cao nhất (PSR-4 Autoloader §x1.x2.p5).
- Ánh xạ tiền tố namespace tới đường dẫn lớp trong thư mục cơ sở (PSR-4 Autoloader §x1.x3).
- Một tệp khai báo các ký hiệu hoặc gây tác dụng phụ — thiết kế của tệp helper (PSR-1 Basic Coding Standard §x1.x1.p3).
Xem thêm
Phần tiêu đề “Xem thêm”- /integrations/codeigniter/integration/ — tài liệu tham khảo về tích hợp và bài kiểm thử nhanh.
- /integrations/codeigniter/install/ — cài đặt và kiểm tra cơ chế phát hiện.
- /integrations/codeigniter/overview/ — toàn bộ bề mặt giao diện lập trình ứng dụng (API).
- /integrations/codeigniter/troubleshooting/ — các kiểu lỗi của cơ chế phát hiện.