什么是 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! 谢谢!
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。