05百融云策略引擎項目交付-laravel實戰完整交付定義常量分文件配置-獨立建立lib類處理-成功導出pdf-優雅草卓伊凡
引言
此前只是把關于如何把查詢內容導出pdf庫的代碼實現了,但是我們并沒有完成整個項目,這最后一個步驟就是安裝composer再安裝tcpdf庫,最后修改結構目錄實現完整項目功能,查詢得到結果導出pdf庫,本篇調整目錄結構,分文件實現代碼,完整交付過程完成交付。
演示demo地址
bairong.youyacao.com
實戰開始
我卓伊凡將為你提供完整的調整目錄結構,分文件實現代碼,完整交付過程,對待小項目也要如此,否則很多人永遠敷衍了事永遠成不了事。
首先上篇我們知道安裝完成了
2. 調整目錄結構
建議的目錄結構:
/ (項目根目錄)
├── composer.json
├── composer.lock
├── vendor/ (Composer自動生成)
├── config/
│ └── constants.php (常量配置)
├── lib/
│ ├── BairongAPI.php (API處理類)
│ └── PDFGenerator.php (PDF生成類)
├── temp/ (臨時文件目錄)
├── assets/
│ ├── css/
│ ├── js/
│ └── images/
│ └── logo.png (企業logo)
└── index.php (主入口文件)
我們查看目錄結構,
我們對應建立起來 其他文件夾
3. 分文件實現代碼
config/constants.php
<?php
// API配置常量
define('API_CODE', '保密');
define('APP_KEY', '保密');
define('STRATEGY_ID', '保密');
define('SANDBOX_URL', 'https://sandbox-api2.100credit.cn/infoverify/v3/info_verify');
define('PRODUCTION_URL', 'https://api2.100credit.cn/infoverify/v3/info_verify');// 路徑常量
define('ROOT_PATH', dirname(__DIR__));
define('TEMP_PATH', ROOT_PATH.'/temp');
define('ASSETS_PATH', ROOT_PATH.'/assets');
lib/BairongAPI.php
<?php
require_once ROOT_PATH.'/config/constants.php';class BairongAPI
{// ... 保持原有的BairongAPI類代碼不變 ...// 只需將硬編碼的配置改為使用常量,如:private $apiCode = API_CODE;private $appKey = APP_KEY;// ... 其他代碼不變 ...
}
那么也就是
將我們在 constants.php中定義的常量 改過來
lib/PDFGenerator.php
<?php
require_once ROOT_PATH.'/vendor/autoload.php';
require_once ROOT_PATH.'/config/constants.php';class PDFGenerator
{// ... 保持原有的PDFGenerator類代碼不變 ...// 修改logo路徑使用常量:$logoFile = ASSETS_PATH.'/images/logo.png';// ... 其他代碼不變 ...
}
這個就是主要的 類,其實我們之前就沒有方logo 不過我們可以放個logo后面
index.php
<?php
require_once __DIR__.'/config/constants.php';
require_once __DIR__.'/vendor/autoload.php';
require_once __DIR__.'/lib/BairongAPI.php';
require_once __DIR__.'/lib/PDFGenerator.php';// 確保臨時目錄存在
if (!file_exists(TEMP_PATH)) {mkdir(TEMP_PATH, 0755, true);
}// ... 保持原有的表單處理邏輯 ...
// 修改PDF導出部分的文件路徑:
$pdfFile = TEMP_PATH.'/verify_result_'.date('YmdHis').'.pdf';
// ... 其余代碼不變 ...
接下來這個是入口文件,index 我們修改為以下內容
改好后報錯
Parse error: syntax error, unexpected token “<”, expecting end of file in /www/wwwroot/bairong.youyacao.com/lib/PDFGenerator.php on line 320
這個錯誤是因為在 PDFGenerator.php
類文件中直接包含了 HTML 代碼,這是不允許的。HTML 導出按鈕的代碼應該放在 index.php
文件中,而不是 PDF 生成類中。
修正方案
1. 修改 lib/PDFGenerator.php
刪除文件末尾的 HTML 代碼部分,確保類文件只包含 PHP 代碼:
<?php
require_once ROOT_PATH.'/vendor/autoload.php';
require_once ROOT_PATH.'/config/constants.php';class PDFGenerator
{// ... 保持原有的 PDFGenerator 類代碼 ...// 確保文件末尾沒有 ?> 閉合標簽和 HTML 代碼// 類定義結束后不要有任何其他內容
}
2. 在 index.php
中添加導出按鈕
在 index.php
的結果顯示區域添加導出按鈕代碼:
<!-- 在 index.php 的結果顯示區域添加 -->
<?php if (isset($result)): ?><?php echo (new BairongAPI())->formatResult($result); ?><?php if (!isset($result['error'])): ?><div class="mt-4 text-center"><form method="post" style="display: inline;"><input type="hidden" name="name" value="<?php echo htmlspecialchars($_POST['name'] ?? ''); ?>"><input type="hidden" name="id_number" value="<?php echo htmlspecialchars($_POST['id_number'] ?? ''); ?>"><input type="hidden" name="phone" value="<?php echo htmlspecialchars($_POST['phone'] ?? ''); ?>"><button type="submit" name="export_pdf" class="btn btn-danger"><i class="fas fa-file-pdf me-2"></i>導出PDF報告</button></form></div><?php endif; ?>
<?php endif; ?>
3. 完整修正后的 lib/PDFGenerator.php
<?php
require_once ROOT_PATH.'/vendor/autoload.php';
require_once ROOT_PATH.'/config/constants.php';class PDFGenerator
{/*** 生成查詢結果PDF* @param array $result 查詢結果數據* @param array $queryParams 查詢參數(姓名、身份證、手機號)* @return string PDF文件路徑*/public static function generateResultPDF($result, $queryParams){// 創建TCPDF實例$pdf = new TCPDF(PDF_PAGE_ORIENTATION, PDF_UNIT, PDF_PAGE_FORMAT, true, 'UTF-8', false);// 設置文檔信息$pdf->SetCreator('優雅草科技');$pdf->SetAuthor('優雅草科技');$pdf->SetTitle('百融云信息驗證報告');$pdf->SetSubject('信息驗證結果');$pdf->SetKeywords('百融云, 信息驗證, 優雅草科技');// 設置默認等寬字體$pdf->SetDefaultMonospacedFont('courier');// 設置邊距$pdf->SetMargins(15, 15, 15);$pdf->SetHeaderMargin(5);$pdf->SetFooterMargin(10);// 設置自動分頁$pdf->SetAutoPageBreak(TRUE, 25);// 設置圖像比例$pdf->setImageScale(PDF_IMAGE_SCALE_RATIO);// 添加頁面$pdf->AddPage();// 生成封面self::generateCoverPage($pdf, $queryParams);// 添加新頁面放置詳細內容$pdf->AddPage();// 生成基本信息部分self::generateBasicInfo($pdf, $result, $queryParams);// 生成驗證結果部分self::generateVerificationResult($pdf, $result);// 生成手機驗證部分self::generatePhoneVerification($pdf, $result);// 生成特殊名單部分self::generateSpecialList($pdf, $result);// 定義輸出文件名$filename = 'verify_result_'.date('YmdHis').'.pdf';$filepath = TEMP_PATH.'/'.$filename;// 輸出PDF文件$pdf->Output($filepath, 'F');return $filepath;}// ... 保持其他方法不變 ...// 注意:不要在此文件末尾包含任何HTML代碼或PHP閉合標簽
}
4. 完整實現流程
- 初始化項目:
mkdir myproject
cd myproject
- 安裝依賴:
composer require tecnickcom/tcpdf
- 創建目錄結構:
mkdir -p config lib temp assets/{css,js,images}
- 添加配置文件:
- 將上面的
constants.php
放入config/
目錄 - 將企業logo圖片放入
assets/images/
目錄
- 將上面的
- 添加類文件:
- 將
BairongAPI.php
放入lib/
目錄 - 將
PDFGenerator.php
放入lib/
目錄
- 將
- 設置權限:
chmod -R 755 temp/
- 修改index.php:
- 使用上面提供的分文件版本的
index.php
- 使用上面提供的分文件版本的
- 測試運行:
- 確保PHP環境正常運行(建議PHP 7.4+)
- 訪問index.php進行測試
5. 關鍵注意事項
- 字體支持:
- TCPDF默認不包含中文字體,需要手動添加
- 可以從
vendor/tecnickcom/tcpdf/fonts/
目錄中選擇或添加新字體
- 臨時目錄:
- 確保Web服務器對
temp/
目錄有寫入權限 - 定期清理臨時文件(可以設置cron任務)
- 確保Web服務器對
- 生產環境:
- 禁用測試環境URL
- 啟用SSL證書驗證
- 限制PDF生成頻率防止濫用
- 錯誤處理:
- 添加PDF生成失敗的異常處理
- 記錄生成日志
- 性能優化:
- 對于高并發場景,考慮緩存PDF結果
- 使用opcache提升PHP性能
完整修改后 我們成功可以訪問了
也可以進行查詢了
本項目完整了整個功能。