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#...

组件是如何支持 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! 谢谢!

154 声望
0 粉丝
0 条评论
推荐阅读
php实现只需要一个QQ号就可以获得用户信息
{代码...} DEMO:[链接]此处输入你的QQ号

TANKING27阅读 7.3k评论 5

初学后端,如何做好表结构设计?
这篇文章介绍了设计数据库表结构应该考虑的4个方面,还有优雅设计的6个原则,举了一个例子分享了我的设计思路,为了提高性能我们也要从多方面考虑缓存问题。

王中阳Go4阅读 1.7k评论 2

封面图
一分钟搞明白!快速掌握 Go WebAssembly
最近因为各种奇怪的原因,更多的接触到了 WebAssembly。虽然之前很多博客也翻过写过各种文章,但总感觉欠些味道。于是今天梳理了一版,和大家一起展开学习。

煎鱼4阅读 2.2k

面试官:请说一下如何优化结构体的性能?
使用内存对齐机制优化结构体性能,妙啊!前言之前分享过2篇结构体文章:10秒改struct性能直接提升15%,产品姐姐都夸我好棒 和 Go语言空结构体这3种妙用,你知道吗? 得到了大家的好评。这篇继续分享进阶内容:结...

王中阳Go4阅读 3.8k评论 2

封面图
Laravel入门及实践,快速上手ThinkSNS+二次开发
【摘要】自从ThinkSNS+不使用ThinkPHP框架而使用Laravel框架之后,很多人都说技术门槛抬高了,其实你与TS+的距离仅仅只是学习一个新框架而已,所以,我们今天来说说Laravel的入门。

ThinkSNS1阅读 2.4k

我让chatGPT用PHP写一个MVC框架,不仅写出来,还能跑!
没想到写出来的框架确实挺简单的,但是又没觉得哪里不对,于是我尝试把这个框架放到服务器试试能不能跑起来,最后还真的可以跑起来,为了让大家能够看到这个框架的演示,我直接爬一个热搜,然后便于展示数据。

TANKING1阅读 1.7k

封面图
开发一个全网搜索引擎的大致流程
由于对搜索引擎技术很感兴趣,便开始尝试开发一个搜索引擎。在参考了网上有限的资料后,加上自己钻研,最终开发出了一个小型的全网搜索引擎,底部有项目地址和搜索测试图片。

会飞的鸟1阅读 5.7k评论 1

154 声望
0 粉丝
宣传栏