Bắt đầu nhanh — PDF đầu tiên của bạn trong CodeIgniter 4
Tổng quan nhanh
Phần tiêu đề “Tổng quan nhanh”Phân giải service pdf trong một controller, thêm nội dung vào tài liệu của service đó, rồi trả về phản hồi tải xuống. Nhờ vậy, bạn có một tệp Portable Document Format (PDF) chỉ với ba dòng và một phản hồi Hypertext Transfer Protocol (HTTP).
Cài đặt
Phần tiêu đề “Cài đặt”composer require nextpdf/codeigniterĐể biết các yêu cầu và cách kiểm tra việc phát hiện gói, xem /integrations/codeigniter/install/.
Bước 1 — Tạo một controller
Phần tiêu đề “Bước 1 — Tạo một controller”Tạo một controller trả về PDF. Thư viện Pdf tạo cho bạn một tài liệu mới, rồi chuyển tài liệu đó thành một DownloadResponse của CodeIgniter.
Mọi ví dụ PHP trên trang này đều đặt declare(strict_types=1); sau thẻ mở PHP, trên một dòng riêng (PSR-12 §x1.x3.p11; §x1.x3.p34).
<?php
declare(strict_types=1);
namespace App\Controllers;
use CodeIgniter\HTTP\DownloadResponse;use NextPDF\CodeIgniter\Config\Services;
final class InvoiceController extends BaseController{ public function download(int $id): DownloadResponse { $pdf = Services::pdf();
$pdf->document()->addPage(); $pdf->document()->cell(0, 10, "Invoice #{$id}");
return $pdf->download("invoice-{$id}.pdf"); }}Services::pdf() trả về một Pdf mới. Bộ kiểm thử chức năng của gói cũng xác minh rằng tài liệu bên dưới của nó là mới trong mỗi lần gọi. Lệnh gọi download() tạo một DownloadResponse với disposition attachment.
Bước 2 — Thêm một route
Phần tiêu đề “Bước 2 — Thêm một route”Ánh xạ một route tới phương thức của controller trong app/Config/Routes.php:
$routes->get('invoices/(:num)/pdf', 'InvoiceController::download/$1');Bước 3 — Yêu cầu PDF
Phần tiêu đề “Bước 3 — Yêu cầu PDF”Mở /invoices/42/pdf. Trình duyệt của bạn sẽ tải xuống invoice-42.pdf. Phản hồi này bao gồm Content-Type: application/pdf và các header tăng cường bảo mật phản hồi của gói.
Biến thể — xem trước inline bằng helper
Phần tiêu đề “Biến thể — xem trước inline bằng helper”Helper toàn cục pdf() tương đương với Services::pdf(). Gọi inline() để hiển thị PDF trong trình duyệt thay vì tải xuống:
<?php
declare(strict_types=1);
namespace App\Controllers;
use CodeIgniter\HTTP\DownloadResponse;
final class ReportController extends BaseController{ public function preview(): DownloadResponse { $pdf = pdf();
$pdf->document()->addPage(); $pdf->document()->cell(0, 10, 'Monthly Report');
return $pdf->inline('report.pdf'); }}Biến thể — dùng trực tiếp document và PdfResponse
Phần tiêu đề “Biến thể — dùng trực tiếp document và PdfResponse”Nếu đã có một Document, bạn có thể tạo phản hồi trực tiếp bằng PdfResponse. Helper pdf_document() cung cấp cho bạn một tài liệu mới đã được cấu hình sẵn.
<?php
declare(strict_types=1);
namespace App\Controllers;
use CodeIgniter\HTTP\DownloadResponse;use NextPDF\CodeIgniter\Http\PdfResponse;
final class DocumentController extends BaseController{ public function generate(): DownloadResponse { $document = pdf_document(); $document->addPage(); $document->cell(0, 10, 'Hello World');
return PdfResponse::download($document, 'hello.pdf'); }}Những gì bạn đã xây dựng
Phần tiêu đề “Những gì bạn đã xây dựng”- Một controller phân giải một service NextPDF và trả về một
DownloadResponseđược định kiểu. - Hai điểm vào tương đương nhau: lớp
Servicesvà các helperpdf()/pdf_document(). - Một phản hồi với
application/pdf, các header bảo mật của gói và một tên tệp đã được làm sạch.
Các bước tiếp theo
Phần tiêu đề “Các bước tiếp theo”Để phần giới thiệu đầu tiên này luôn tập trung, hướng dẫn lược bỏ phần xử lý lỗi. Để có các controller cấp sản xuất với dependency injection, xử lý ngoại lệ, khả năng quan sát và queue job, hãy tiếp tục đến /integrations/codeigniter/production-usage/. Trang đó trình bày các biến thể đã được tăng cường.
Tuân thủ
Phần tiêu đề “Tuân thủ”- Thẻ mở PHP nằm trên một dòng riêng trong các ví dụ mã (PSR-12 Extended Coding Style §x1.x3.p11).
- Dạng câu lệnh declare(strict_types=1) được dùng trong các ví dụ mã (PSR-12 Extended Coding Style §x1.x3.p34).
Xem thêm
Phần tiêu đề “Xem thêm”- /integrations/codeigniter/overview/ — toàn bộ bề mặt giao diện lập trình ứng dụng (API).
- /integrations/codeigniter/configuration/ — thay đổi các giá trị mặc định và đường dẫn.
- /integrations/codeigniter/production-usage/ — các controller cấp sản xuất và job bất đồng bộ.
- /integrations/codeigniter/troubleshooting/ — khi một route không trả về PDF nào.