什么是PHPCORSPPHPCORS是一个PHP跨域中间件,全称“PHPCORSMiddleware”,专门用来处理和基于PHP的程序的CORS信息问题主要是针对PHP程序中设置跨域信息的支持。该更新增加了对ThinkPHP5框架的支持。在ThinkPHP5框架中添加PSR-15中间件实例的使用。ThinkPHP5项目中只依赖medz/cors。配置在ThinkPHP框架中,没有配置选项。可以在config下新建一个名为cors.php的文件,也可以在某个模块下新建一个cors.php文件,甚至可以在全局公共配置或模块公共配置下新建一个cors.php文件。cors是key的配置。配置内容请参考https://github.com/medz/cors#。组件如何支持ThinkPHP注入代码参考ThinkPHP官方扩展包。首先我们创建src/ThinkPHP/injection.php文件,然后在composer.json的autoload中使用files方法加载该文件,代码如下:make(Injecter::class);$injecter->register();},\think\Container::getInstance());为了不影响其他框架的使用,先判断ThinkPHP5的容器类是否存在。如果存在则执行call_user_func,用闭包包裹,然后使用容器egg创建Injector实例。ThinkPHP5中使用的ThinkPHP5hook在框架读取模块和全局配置后,使用app_inithook将CORS服务的单例处理注入到容器中。然后使用response_send在发送前拦截Response,处理它的CORS信息!ThinkPHP5的坑是因为框架垄断了OPTIONS请求的绑定和跨域信息的判断和处理。目前只能通过response_sendhook拦截Response实现CORS处理!ThinkPHP5.1的中间件运行机制有问题,没有全局的中间件机制。所以通过中间件进行预处理是不可能的!!!PSR-15实例在组件中有一个psr-15接口中间件实现代码,类名为Medz\Cors\PSR\CorsMiddleware,你可以在任何使用PSR-15的地方使用。更多项目GitHub:https://github.com/medz/cors欢迎Satr!谢谢!
