Bỏ qua để đến nội dung

Khởi động và phát hiện NextPDF trong CodeIgniter

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ấy nextpdf/codeigniter.
  • $composerPackages — một bộ lọc only / exclude tù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ồm servicesregistrars, 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).

  1. 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 helper src/CodeIgniter/Helpers/pdf_helper.php.
  2. 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.
  3. Phát hiện Registrar. Framework thu thập các lớp Registrar. Hàm Registrar::Autoload() của gói đăng ký helper pdf với trình nạp helper của CodeIgniter.
  4. 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ặc Services::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.

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:

ServiceDùng chung theo mặc địnhGhi chú
fontRegistryĐược làm nóng trước, sau đó khóa lại.
imageRegistryBộ nhớ đệm theo cơ chế ít dùng gần đây nhất (LRU) có giới hạn.
documentFactoryKhông giữ trạng thái.
pdfDocumentkhôngTạo mới ở mỗi lần gọi.
pdfkhôngTạo mới ở mỗi lần gọi.
tsaClientnull khi không có URL của Time-Stamp Authority (TSA) nào được cấu hình.
pdfSignerkhôngnull 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.

Cấu hình hiệu lực được phân giải theo thứ tự này:

  1. Giá trị mặc định của gói trong NextPDF\CodeIgniter\Config\NextPdf.
  2. Một lớp ứng dụng Config\NextPdf kế 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.
  3. 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ường nextpdf là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()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.

  • composer dump-autoload — xây dựng lại bản đồ PSR-4 và danh sách autoload files sau 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ột Document.
  • 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.
  • 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).
  • /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.