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

  2. 安装依赖:

    composer require tecnickcom/tcpdf

  3. 创建目录结构:

    mkdir -p config lib temp assets/{css,js,images}

  4. 添加配置文件:

    • 将上面的constants.php放入config/目录
    • 将企业logo图片放入assets/images/目录
  1. 添加类文件:
    • 将BairongAPI.php放入lib/目录
    • 将PDFGenerator.php放入lib/目录
  1. 设置权限:

    chmod -R 755 temp/

  2. 修改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性能

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

也可以进行查询了

本项目完整了整个功能。

相关推荐
三少爷的鞋5 分钟前
AI 时代,我们都将成为通才型开发者:只懂 Android,已经不够了
android
Dovis(誓平步青云)4 小时前
家里设备越来越多,如何用一张空间地图控制灯光和温度![
android·java·前端·javascript·人工智能·电脑
晚风叙码6 小时前
MySQL 数据类型详解:从数值到字符串,一篇讲透
android·mysql·adb
传奇开心果编程6 小时前
【Compose Multiplatform 跨端开发学与练】第3课 布局与组件
android·windows·学习·ui·ios·kotlin·composer
逆天的蝈蝈7 小时前
数据安全、信创适配与系统对接
低代码·软件开发
传奇开心果编程9 小时前
【Compose Multiplatform 跨端开发学与练】第8课 资源管理与主题
android·windows·学习·ios·kotlin·web·composer
传奇开心果编程10 小时前
【Compose Multiplatform 跨端开发学与练】第9课 测试与调试
android·学习·macos·ios·kotlin·web·composer
传奇开心果编程11 小时前
【Compose Multiplatform 跨端开发学与练】第4课 导航与路由
android·windows·学习·ui·ios·kotlin·composer
传奇开心果编程11 小时前
【Compose Multiplatform 跨端开发学与练】第6课 状态管理与架构
android·学习·ui·ios·架构·kotlin·composer
事圆则缓11 小时前
Android AOSP 定制常见概念:源码目录、系统镜像与刷机流程
android