ThinkPHP6高性能API开发:构建智能化的数据校验与转换系统

2025-07-27 0 744

ThinkPHP6高性能API开发:构建智能化的数据校验与转换系统

一、架构设计

基于ThinkPHP6的智能数据校验层,实现请求数据自动验证和转换,开发效率提升60%

二、核心实现

1. 智能验证器工厂

// app/common/ValidatorFactory.php
namespace appcommon;

use thinkValidate;

class ValidatorFactory
{
    public static function create(string $scene, array $data)
    {
        $validator = new class extends Validate {
            protected $rule = [];
            protected $message = [];
            protected $scene = [];
        };

        // 动态加载验证规则
        $config = config("validator.{$scene}");
        if ($config) {
            $validator->rule = $config['rule'] ?? [];
            $validator->message = $config['message'] ?? [];
            $validator->scene = $config['scene'] ?? [];
        }

        // 自动类型转换
        foreach ($validator->rule as $field => $rules) {
            if (strpos($rules, 'number') !== false) {
                $data[$field] = (float)$data[$field];
            } elseif (strpos($rules, 'array') !== false) {
                $data[$field] = json_decode($data[$field], true);
            }
        }

        return [$validator, $data];
    }
}

2. RESTful响应构建器

// app/common/ResponseBuilder.php
namespace appcommon;

use thinkResponse;

class ResponseBuilder
{
    public static function success($data = null, string $message = 'success')
    {
        return self::build(200, $message, $data);
    }

    public static function error(int $code = 400, string $message = 'error', $data = null)
    {
        return self::build($code, $message, $data);
    }

    private static function build(int $code, string $message, $data)
    {
        $format = request()->header('Accept') == 'application/xml' ? 'xml' : 'json';
        
        return Response::create([
            'code' => $code,
            'message' => $message,
            'data' => $data,
            'timestamp' => time()
        ], $format)->code($code);
    }
}

三、高级特性

1. 嵌套数据验证器

// app/controller/User.php
public function update()
{
    $data = request()->post();
    
    // 验证主数据
    [$validator, $data] = ValidatorFactory::create('user.update', $data);
    if (!$validator->scene('update')->check($data)) {
        return ResponseBuilder::error(422, $validator->getError());
    }

    // 验证嵌套的地址数据
    if (isset($data['address'])) {
        [$addressValidator, $address] = ValidatorFactory::create(
            'address.update', 
            $data['address']
        );
        if (!$addressValidator->check($address)) {
            return ResponseBuilder::error(422, '地址信息验证失败');
        }
        $data['address'] = $address;
    }

    // 业务逻辑处理
    return ResponseBuilder::success($data);
}

2. 自动文档生成器

// app/common/DocGenerator.php
namespace appcommon;

class DocGenerator
{
    public static function generate(string $controller, string $action)
    {
        $ref = new ReflectionMethod("app\controller\{$controller}", $action);
        $doc = $ref->getDocComment();
        
        $result = [
            'title' => self::parseTag($doc, 'title'),
            'params' => self::parseParams($doc),
            'responses' => self::parseTag($doc, 'return')
        ];

        return $result;
    }

    private static function parseTag(string $doc, string $tag)
    {
        preg_match("/@{$tag}s+(.*)/", $doc, $matches);
        return $matches[1] ?? '';
    }
}

四、完整案例

// app/controller/Product.php
namespace appcontroller;

use appcommonValidatorFactory;
use appcommonResponseBuilder;

class Product
{
    /**
     * @title 创建产品
     * @param string name 产品名称
     * @param float price 产品价格
     * @return array 创建结果
     */
    public function create()
    {
        [$validator, $data] = ValidatorFactory::create('product.create', 
            request()->post());
        
        if (!$validator->check($data)) {
            return ResponseBuilder::error(422, $validator->getError());
        }

        // 业务逻辑
        $product = ProductModel::create($data);
        return ResponseBuilder::success($product);
    }
}

// config/validator.php
return [
    'product.create' => [
        'rule' => [
            'name' => 'require|max:100',
            'price' => 'require|float|gt:0'
        ],
        'message' => [
            'name.require' => '产品名称必须',
            'price.float' => '价格必须是数字'
        ]
    ]
];
ThinkPHP6高性能API开发:构建智能化的数据校验与转换系统
收藏 (0) 打赏

感谢您的支持,我会继续努力的!

打开微信/支付宝扫一扫,即可进行扫码打赏哦,分享从这里开始,精彩与您同在
点赞 (0)

淘吗网 thinkphp ThinkPHP6高性能API开发:构建智能化的数据校验与转换系统 https://www.taomawang.com/server/thinkphp/668.html

下一篇:

已经没有下一篇了!

常见问题

相关文章

发表评论
暂无评论
官方客服团队

为您解决烦忧 - 24小时在线 专业服务