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任务)
- 生产环境:
- 禁用测试环境URL
- 启用SSL证书验证
- 限制PDF生成频率防止滥用
- 错误处理:
- 添加PDF生成失败的异常处理
- 记录生成日志
- 性能优化:
- 对于高并发场景,考虑缓存PDF结果
- 使用opcache提升PHP性能
完整修改后 我们成功可以访问了
也可以进行查询了
本项目完整了整个功能。