PHP 跨域中间件 v1.3.0 发布,新增 PSR-15 和 ThinkPHP 支持啦

什么是 PHP CORS

PHP CORS 是一个 PHP 跨域中间件,全名叫做 「PHP CORS Middleware」,专门用来处理基于 PHP 程序的 CORS 信息问题,主要针对在 PHP 程序中设置跨域信息的支持。

更新内容

  • 增加 ThinkPHP 5 框架的支持
  • 增加 PSR-15 中间件实例

在 ThinkPHP 5 框架中的使用

只要在 ThinkPHP 5 的项目中依赖 medz/cors 即可。

配置

在 ThinkPHP 框架中,配置没有什么可选你可以在 config 下面新建一个名为 cors.php 的文件,或者在某一个模块下面新建 cors.php 文件,甚至可以在全局公用配置或者模块公用配置中进行 cors 为 key 的配置,其中配置内容请参考 https://github.com/medz/cors#configure

组件是如何支持 ThinkPHP 的

注入代码参考自 ThinkPHP 官方的拓展包,首先我们建立 src/ThinkPHP/injection.php 文件,然后在 composer.json 的 autoload 中使用 files 方式对该文件进行加载,代码如下:

<?php

declare(strict_types=1);

namespace Medz\Cors\ThinkPHP;

if (!class_exists(\think\Container::class)) {
    return;
}

call_user_func(function (\think\Container $container) {
    $injecter = $container->make(Injecter::class);
    $injecter->register();
}, \think\Container::getInstance());

为了不影响其他框架的使用,优先判断 ThinkPHP 5 的容器类是否存在,如果存在,执行 call_user_func,使用闭包进行包装,然后使用容器蛋里进行 Injector 实例。

使用的 ThinkPHP 5 钩子

在 ThinkPHP 5 中使用 app_init 钩子,作用是为了在框架读取模块和全局配置后进行 CORS 服务的单例处理注入到容器中。
然后使用 response_send 在 Response 发送前进行拦截,并对其 CORS 信息的处理!

ThinkPHP 5 的坑

因为框架独占了 OPTIONS 请求的绑定以及跨域信息的判断处理,目前只能通过 response_send 钩子拦截 Response 实现 CORS 处理!

ThinkPHP 5.1 的中间件运行机制有问题,且无全局中间件机制。所以无法通过中间件进行预处理!!!

PSR-15 实例

在组件中有一份 psr-15 的接口中间件实现代码,类名称叫做 Medz\Cors\PSR\CorsMiddleware 你可以用于任何使用 PSR-15 的地方。

更多

项目 GitHub:https://github.com/medz/cors 欢迎 Satr! 谢谢!

Seven 的代码太渣,欢迎关注我的新拓展包 medz/cors 解决 PHP 项目程序设置跨域需求。
《L05 电商实战》
从零开发一个电商项目,功能包括电商后台、商品 & SKU 管理、购物车、订单管理、支付宝支付、微信支付、订单退款流程、优惠券等
《L03 构架 API 服务器》
你将学到如 RESTFul 设计风格、PostMan 的使用、OAuth 流程,JWT 概念及使用 和 API 开发相关的进阶知识。
讨论数量: 3
medz

@abccj2

file
没有没有,最早这个项目是为了 laravel 来的!

5年前 评论
Jennie

我看到最多的字眼是:ThinkPHP :smile:

5年前 评论

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!