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.pswp.cn/news/917019.shtml
繁体地址,请注明出处:http://hk.pswp.cn/news/917019.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

模型训练速度慢排查

一、nvidia-smi 查看 GPU 的利用率与显存。若 GPU 利用率低或波动&#xff0c;说明 CPU 处理数据的速度跟不上 GPU 计算的速度&#xff0c;需要检查数据传输并调整 num_workers&#xff1b;若 GPU 显存充足&#xff0c;可以逐步增加 batch_size_per_card 直至显存占满&#xff…

STM32学习记录--Day4

今天了解了一下SPI总线&#xff1a;1.SPI内部结构​​&#x1f50c; SPI 四大核心引脚功能详解​​1. ​​MOSI (Master Output Slave Input)​​​​功能​​&#xff1a;​​主机输出数据线​​​​工作流程​​&#xff1a;主机内部发送数据寄存器 (TxDR) 的数据 → 移位寄存…

【网络安全】等级保护2.0解决方案

等保2.0&#xff08;网络安全等级保护2.0&#xff09;是我国网络安全领域的基础性制度&#xff0c;在1.0版本基础上扩展了云计算、大数据、物联网等新兴领域&#xff0c;形成覆盖全场景的安全防护框架。其核心是按信息系统重要程度划分等级&#xff08;1-5级&#xff09;&#…

TypeScript 基础介绍(二)

引言&#xff1a;从基础到结构化类型 在《TypeScript 基础介绍&#xff08;一&#xff09;》TypeScript基础介绍&#xff08;一&#xff09;-CSDN博客中&#xff0c;我们探讨了 TypeScript 的类型系统基础、联合类型、类型断言和类型守卫等核心特性。这些内容解决了 JavaScript…

【科研绘图系列】R语言绘制线性相关性

文章目录 介绍 加载R包 数据下载 导入数据 数据预处理 画图 系统信息 参考 介绍 【科研绘图系列】R语言绘制线性相关性 加载R包 library(tidyverse) library(ggplot2) library(ggsignif) library(RColorBrewer) library(dplyr) library(reshape2

FastAPI的请求-响应周期为何需要后台任务分离?

url: /posts/c7b54d6b3b6b5041654e69e5610bf3b9/ title: FastAPI的请求-响应周期为何需要后台任务分离? date: 2025-07-31T06:11:25+08:00 lastmod: 2025-07-31T06:11:25+08:00 author: cmdragon summary: FastAPI 的请求-响应周期遵循 ASGI 协议,类似于餐厅点餐流程。同步处…

多种录音笔录音芯片方案推荐

多种录音笔录音芯片方案推荐一、引言随着信息技术的飞速发展&#xff0c;录音笔作为一种重要的音频记录设备&#xff0c;在会议记录、采访、学习等众多场景中得到广泛应用。其核心的录音芯片方案直接影响录音质量、功能特性以及产品成本。唯创知音作为音频芯片领域的知名厂商&a…

Linux系统编程Day2-- Linux常用操作

一、Linux 基本命令概览以下是一些常用的Linux命令操作&#xff0c;后续我们会对其每个单独如何使用进行讲解。操作类型常用命令示例文件/目录操作ls, cd, cp, mv, rm, mkdir, rmdir查看文件内容cat, less, more, head, tail查找操作find, grep, locate, which权限管理chmod, c…

cs336 assignment1 作业环境配置

代码结构 所有的代码写到cs336_basics/* 下面&#xff0c;在adapters.py里调用自己的.py&#xff0c;通过所有的test。 作业资料参考 karpathy视频仓库&#xff1a; 视频 github仓库 测试项目运行环境 下载uv uv官网仓库 使用命令&#xff1a; powershell -ExecutionPoli…

YOLOv11来了,使用YOLOv11训练自己的数据集和推理(附YOLOv11网络结构图)

文章目录前言一、YOLOv11代码下载地址1.YOLOv11模型结构图二、数据集准备1.数据集标注软件2.voc数据集格式转换3.数据集划分4.修改yolo的训练配置文件三、YOLO环境配置教程1.pytorch环境安装2.其他依赖安装四、YOLOv11训练五、YOLOv11推理六、解决训练过程中断怎么继续上次训练…

20250731在荣品的PRO-RK3566开发板的Android13下跑通敦泰的FT8206触控芯片

20250731在荣品的PRO-RK3566开发板的Android13下跑通敦泰的FT8206触控芯片 2025/7/31 17:48缘起&#xff1a;本文前置条件&#xff1a;已经解决FT8206和PRO-RK3566的硬件连接。 通过i2cdect可以扫描到i2c从机地址&#xff1a;0x38。【8位地址为0x70】缘起&#xff1a;本文只分析…

异常检测:算法分类及经典模型概览

第一部分&#xff1a;异常检测的核心概念 在深入算法细节之前&#xff0c;理解异常检测的“语境”至关重要。 1. 什么是异常检测&#xff1f; 异常检测&#xff08;Anomaly Detection 或 Outlier Detection&#xff09;旨在通过数据挖掘技术&#xff0c;识别出数据集中与大多数…

技术干货 | 矢网DTF测量技术:透视线缆、天线与波导内部缺陷的“射频X光”(二)

无线通信、雷达等领域中&#xff0c;射频组件与传输系统的性能至关重要&#xff0c;其内部微小损伤易导致信号问题甚至系统失效。传统测试无法精确定位故障点&#xff0c;排查困难。DTF测量&#xff0c;矢网赋予的“透视眼”&#xff01;它能穿透“黑箱”&#xff0c;精确定位线…

【[CSP-J 2022] 上升点列】

题目 [CSP-J 2022] 上升点列 题目描述 在一个二维平面内&#xff0c;给定 n 个整数点 (x i ,y i​ )&#xff0c;此外你还可以自由添加 k 个整数点。 你在自由添加 k 个点后&#xff0c;还需要从 nk 个点中选出若干个整数点并组成一个序列&#xff0c;使得序列中任意相邻两点间…

Kong API Gateway的十年进化史

一、技术基因的诞生&#xff08;2007-2015&#xff09; 2007年&#xff0c;三位意大利开发者Augusto Marietti、Marco Palladino和Michele Orru在博洛尼亚的一个小车库中创立了Mashape公司。 最初他们开发了一个名为Mashup的API聚合平台&#xff0c;试图通过整合第三方API为开发…

蓝牙设备配对:从机发现主机全过程

在蓝牙 paging 过程中&#xff0c;从设备&#xff08;Slave&#xff09;是通过特定的扫描机制和跳频方式来发现主设备发送的 ID 包的&#xff0c;具体过程如下&#xff1a;从设备处于特定扫描模式&#xff1a;从设备需要处于 Page Scan 模式&#xff0c;才能够接收主设备发送的…

聚观早报 | 三星获特斯拉AI芯片订单;小米16首发成安卓最强SOC;iPhone 17 Pro支持8倍光学变焦

聚观早报每日整理最值得关注的行业重点事件&#xff0c;帮助大家及时了解最新行业动态&#xff0c;每日读报&#xff0c;就读聚观365资讯简报。整理丨肖羽7月29日消息三星获特斯拉AI芯片订单小米16首发成安卓最强SOCiPhone 17 Pro支持8倍光学变焦宁德时代滑板底盘公司启动首轮融…

Gemini Fullstack LangGraph Quickstart(DeepSeek+Tavily版本)

文章目录参考资料说明Gemini Fullstack LangGraph QuickstartDeepSeek Fullstack LangGraph Quickstart项目部署完整源码地址后端部署前端部署参考资料 DeepResearch应用开发实战网盘课件资料 说明 本文仅供学习和交流使用&#xff0c;感谢赋范社区相关老师的辛苦付出&#…

钢筋计数误差↓78%!陌讯多模态融合算法在建筑地产AI质检的落地实践

​摘要​​针对建筑地产行业钢筋验收场景的高误差痛点&#xff0c;本文解析陌讯视觉算法的多模态融合架构如何实现毫米级精度目标检测。实测显示&#xff1a;在Jetson Xavier NX边缘设备上&#xff0c;钢筋计数mAP0.5达​​92.4%​​&#xff0c;较基线模型提升28个百分点&…

负载均衡 LoadBalance

问题引入 我们一个服务可能会进行多机部署&#xff0c;也就说多台服务器组成的集群共同对外提供一致的服务&#xff0c;那么我们的微服务的代码就需要拷贝多份&#xff0c;部署到不同的机器上。 我们使用 IDEA 来开启多个相同的服务 这里以 product-service 为例&#xff1a;…