「新轮子」PHP CORS Middleware, 解决 Lumen 程序跨域问题

file

前导

本篇文字作为?《「新轮子」PHP CORS (Cross-origin resource sharing),解决 PHP 项目程序设置跨域需求。》的续篇。

上一篇文字中讲到了 medz/cors 在 Laravel 中的应用,如果你不知道,请看?《「新轮子」PHP CORS (Cross-origin resource sharing),解决 PHP 项目程序设置跨域需求。》这篇文章,而本篇将讲解 medz/cors 在 Laravel Lumen 中的运用。

简介

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

安装

得益于 Composer,现在我们安装变得很简单,请在你的 Lumen 项目中执行:

composer require medz/cors

配置

请参考《配置参考》,然后在你的 Lumen 项目下创建 config/cors.php 文件,其中内容如下:

<?php
return [
    'allow-credentiails' => env('CORS_ALLOW_CREDENTIAILS', false), // set "Access-Control-Allow-Credentials" ? string "false" or "true".
    'allow-headers'      => ['*'], // ex: Content-Type, Accept, X-Requested-With
    'expose-headers'     => [],
    'origins'            => ['*'], // ex: http://localhost
    'methods'            => ['*'], // ex: GET, POST, PUT, PATCH, DELETE
    'max-age'            => env('CORS_ACCESS_CONTROL_MAX_AGE', 0),
];

注册服务

现在,请打开 bootstrap/app.php 文件,添加如下代码:

$app->configure('cors'); // 如果想 `config/cors.php` 的配置生效,请务必添加这行代码!如果没有添加,则使用默认配置。
$app->register(Medz\Cors\Lumen\ServiceProvider::class);

好了,现在请配置完成后进行跨域使用吧,因为 Lumen 的定位为轻量级的 API 框架,所以在 medz/cors 针对 Lumen 的支持中,并没有 Laravel 支持那么复杂,你只需要安装即可使用。

其他

目前 medz/cors 的支持情况如下:

  • [✓]?Array, Coding in Native PHP
  • [✓]?Using PSR-7
  • [❌]Symfony Support
  • [✓]Laravel Support
  • [✓]Lumen Support
  • [❌]Yii2 Support
  • [❌]Slim Framework

其中标示 的部分将逐步支持。

GitHub: https://github.com/medz/cors ,新轮子,请打一个?Star 吧!

Seven 的代码太渣,欢迎关注我的新拓展包 medz/cors 解决 PHP 项目程序设置跨域需求。
《L05 电商实战》
从零开发一个电商项目,功能包括电商后台、商品 & SKU 管理、购物车、订单管理、支付宝支付、微信支付、订单退款流程、优惠券等
《L04 微信小程序从零到发布》
从小程序个人账户申请开始,带你一步步进行开发一个微信小程序,直到提交微信控制台上线发布。
讨论数量: 7

我在lumen中用了该包,但是出现了奇怪的bug,预检请求能够正确返回头部,但是正式请求又出现了406,不知道是什么原因导致的

5年前 评论
medz

@cyshhhh 允许所有请求都携带跨域信息就好了~

5年前 评论

@medz 具体如何设置,后端cors.php要改什么配置,前端vue我用的是axios需要做哪些处理。大佬帮忙解答一下,谢谢

5年前 评论
medz

@cyshhhhcors.php 中,设置 allow-credentialstrue, 然后在 axios 的跨域中将 credentials 打开,这样只要有预检请求,就回不验证真实请求了。我明天发一个小版本,才看到你是在 lumen 中使用,配置允许所有请求都携带跨域信息或者仅 options 携带。

5年前 评论

为什么我按照这个方法在lumen进行了配置,但是前端通过localhost访问我的api依然存在跨域问题,cors.php按照默认的配置设置的

5年前 评论

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