当前位置: 首页 > news >正文

05百融云策略引擎项目交付-laravel实战完整交付定义常量分文件配置-独立建立lib类处理-成功导出pdf-优雅草卓伊凡

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. 完整实现流程

  1. 初始化项目
mkdir myproject
cd myproject
  1. 安装依赖
composer require tecnickcom/tcpdf
  1. 创建目录结构
mkdir -p config lib temp assets/{css,js,images}
  1. 添加配置文件
    • 将上面的constants.php放入config/目录
    • 将企业logo图片放入assets/images/目录
  1. 添加类文件
    • BairongAPI.php放入lib/目录
    • PDFGenerator.php放入lib/目录
  1. 设置权限
chmod -R 755 temp/
  1. 修改index.php
    • 使用上面提供的分文件版本的index.php
  1. 测试运行
    • 确保PHP环境正常运行(建议PHP 7.4+)
    • 访问index.php进行测试

5. 关键注意事项

  1. 字体支持
    • TCPDF默认不包含中文字体,需要手动添加
    • 可以从vendor/tecnickcom/tcpdf/fonts/目录中选择或添加新字体
  1. 临时目录
    • 确保Web服务器对temp/目录有写入权限
    • 定期清理临时文件(可以设置cron任务)
  1. 生产环境
    • 禁用测试环境URL
    • 启用SSL证书验证
    • 限制PDF生成频率防止滥用
  1. 错误处理
    • 添加PDF生成失败的异常处理
    • 记录生成日志
  1. 性能优化
    • 对于高并发场景,考虑缓存PDF结果
    • 使用opcache提升PHP性能

完整修改后 我们成功可以访问了

也可以进行查询了

本项目完整了整个功能。

http://www.lryc.cn/news/605505.html

相关文章:

  • LCM中间件入门(1):工作原理核心概念及Ubuntu环境下的C++实践
  • 【Debian】4-‌2 Gitea搭建
  • Git踩坑
  • windows服务器 maven 配置环境变量,验证maven环境变量是否配置成功
  • es的histogram直方图聚合和terms分组聚合
  • Ubuntu/Debian 搭建 Nginx RTMP 服务器全攻略
  • [Broken IOS] 配置CLI | 终端用户界面TUI
  • 分布式ID方案(标记)
  • 【Linux】linux基础开发工具(二) 编译器gcc/g++、动静态库感性认识、自动化构建-make/Makefile
  • BasicAuthenticationFilter处理 HTTP 基本认证(Basic Authentication)的核心过滤器详解
  • 打破数据质量瓶颈:用n8n实现30秒专业数据质量报告自动化
  • 50天50个小项目 (Vue3 + Tailwindcss V4) ✨ | LiveUserFilter(实时用户过滤组件)
  • ensp安全策略实验
  • 【工具】NVM完全指南:Node.js版本管理工具的安装与使用详解
  • 嵌入式仿真教学的革新力量:深圳航天科技创新研究院引领高效学习新时代
  • 【n8n】如何跟着AI学习n8n【03】:HTTPRequest节点、Webhook节点、SMTP节点、mysql节点
  • 从“碎片化”到“完美重组”:IP报文的分片艺术
  • mysql笔记02:DML插入、更新、删除数据
  • 【读书笔记】Design Patterns (1994)✅
  • 微软发布Microsoft Sentinel数据湖国际版
  • JVM之【Java虚拟机概述】
  • Python实现调整矩阵维度: view
  • 【13】大恒相机SDK C#开发 —— Fom1中实时处理的8个图像 实时显示在Form2界面的 pictureBox中
  • 磁盘坏道检测工具在美国服务器硬件维护中的使用规范
  • MVS相机+YOLO检测方法
  • 【03】大恒相机SDK C#开发 —— 回调采集图像,关闭相机
  • Java WEB技术-序列化和反序列化认识(SpringBoot的Jackson序列化行为?如何打破序列化过程的驼峰规则?如何解决学序列化循环引用问题?)
  • 学习笔记《区块链技术与应用》第三天 网络 难度
  • 详解分布式数据库缓存技术:高性能数据访问的基石
  • 如何在 macOS 上使用 dnsmasq 搭建本地 DNS 缓存/转发