ThinkPHP6 利用中间件实现跨域
2021-08-30 03:52:57 智能网 编程 30


今天使用 Vue 加 axios,做一个小应用,向 ThinkPHP6 的后台发起请求,但是在控制器里加 header 参数,跨域一直不成功,十分郁闷,于是自己写了一个单独的文件测试,在 header 里配置响应头是有用的,如下:

header('Access-Control-Allow-Origin: *');
header('Access-Control-Allow-Headers: Content-Type, Authorization');

所以估计是在 ThinkPHP6 控制器之前,header 设置已经被拦截。

于是把响应头配置放在入口文件的头部,也是可以的,但是带来的问题是,所有控制器都开启跨域,这个肯定是不行的,所以在网上查找,可以利用 ThinkPHP6 的中间件来实现跨域,这样就比较好控制那些控制器开放跨域了,实现如下:

首先是要生成中间件,在命令行模式下输入:

php think make:middleware Cores

如果是多应用模式,还可以在应用里生成

在最末的控制层创建文件。middleware.php和mimiddleware文件夹
一定要在最后的控制层,否则不生效

定义中间件

<?php
// 全局中间件定义文件
return [
    // 全局请求缓存
    // \think\middleware\CheckRequestCache::class,
    // 多语言加载
    // \think\middleware\LoadLangPack::class,
    // Session初始化
    // \think\middleware\SessionInit::class
    app\api\middleware\Cores::class,
];

在middleware目录创建Cores.php

<?php
namespace app\api\middleware;

class Cores
{
    public function handle($request, \Closure $next)
    {
        $response = $next($request);
        $origin = $request->header('Origin', '');

        //OPTIONS请求返回204请求
        if ($request->method(true) === 'OPTIONS') {
            $response->code(204);
        }
        $response->header([
            'Access-Control-Allow-Origin'      => $origin,
            'Access-Control-Allow-Methods'     => 'GET,POST,PUT',
            'Access-Control-Allow-Credentials' => 'true',
            'Access-Control-Allow-Headers'     => '*',
        ]);

        return $response;
    }
    /*
     * 中间结束调度
     */
}

以上是多应用下的使用方法,

也可以使用官方的配置,就更简单了,直接在pp\middleware.php 文件中,引入内置中间件即可

?php
// 全局中间件定义文件
return [
    // 全局请求缓存
    // \think\middleware\CheckRequestCache::class,
    // 多语言加载
    // \think\middleware\LoadLangPack::class,
    // Session初始化
    // \think\middleware\SessionInit::class,

    // 允许跨域请求
    \think\middleware\AllowCrossDomain::class
];

跨域请求成功。

官方文档里还可以在路由里实现跨域,暂时没有测试!


版权声明:本站会员原他文章,转载请附上原文出处链接。
7×24 快讯
后刷新 刷新
今天2021/09/27 星期一
9-25 13:26募邦快讯
孟晚舟已从加拿大起飞 今晚抵达深圳
孟晚舟女士在时隔将近1030天在加拿大的日子后,今天可以回家了!孟晚舟乘坐的航班CA552已经从温哥华起飞,今晚抵达深圳。孟晚舟获释后发表简短演讲,在演讲的最后,她说:“我想感谢我的祖国和祖国人民对我的支持和帮助,这是我走到今天最大的支柱!”
9-24 23:50募邦快讯
华为将全新发布操作系统openEuler欧拉
华为官微消息,9月25日,华为将全新发布操作系统openEuler欧拉。日前,任正非表示,欧拉正在大踏步地前进,欧拉的定位是瞄准国家数字基础设施的操作系统和生态底座,承担着支撑构建领先、可靠、安全的数字基础的历史使命。
9-24 12:13募邦快讯
搜狗宣布完成私有化交易并与腾讯完成合并
搜狗公司发布公告宣布与腾讯完成合并。合并完成后,搜狗将成为腾讯控股间接全资子公司,并完成退市。这也是自今年7月13日,国家市场监管总局无条件批准腾讯控股有限公司收购搜狗公司股权后,搜狗首次披露合并的进一步细节。
9-24 12:11募邦快讯
我国科学家突破二氧化碳人工合成淀粉技术
以二氧化碳为原料,不依赖植物光合作用,直接人工合成淀粉——看似科幻的一幕,真实地发生在实验室里。我国科学家首次实现了二氧化碳到淀粉的从头合成,相关成果北京时间24日由国际知名学术期刊《科学》在线发表。
9-21 13:34募邦快讯
我国载人航天工程发射任务取得20战20捷
北京时间2021年9月20日15时10分,搭载天舟三号货运飞船的长征七号遥四运载火箭,在我国文昌航天发射场点火发射,约597秒后,飞船与火箭成功分离,进入预定轨道,15时22分,飞船太阳能帆板顺利展开且工作正常,发射取得圆满成功。后续,天舟三号货运飞船将与在轨运行的空间站组合体进行交会对接。
9-20 11:00募邦快讯
天舟三号货运飞船将于今日15时许发射
据中国载人航天工程办公室消息,目前,长征七号遥四运载火箭已完成推进剂加注,计划于北京时间2021年9月 20 日 15时许发射天舟三号货运飞船。
9-19 23:33募邦快讯
FCC 文件显示:微软 Surface Duo 2 支持 5G、Wi-Fi 6 和 NFC
IT之家 9 月 19 日消息 据 Android Authority 报道,微软周五向美国联邦通信委员会(FCC)提交了 Surface Duo 2 智能手机的文件。FCC 文件显示,Surface Duo 2 支持 5G 和 4G 网络,以及更快的 Wi-Fi 6 标准和 NFC 功能。
9-19 23:27募邦快讯
中秋假期首日:近郊出游、中短途旅游增多
记者19日从公安部交管局获悉,中秋假期首日,群众近郊出游、中短途旅游增多,部分地方高速公路出城方向、城郊地区及旅游景区周边道路交通流量明显增加。(新华社)
9-19 23:25募邦快讯
新冠疫苗第三针真的来了,两省已官宣!
我国正在推动针对高风险人群的新冠疫苗加强剂接种计划。截至9月18日,河南和浙江两地已经官方宣布,将从本月开始启动加强疫苗的接种。
9-19 18:00募邦快讯
天舟三号货运飞船发射任务全系统准备就绪
央视网消息:天舟三号货运飞船将于近日在文昌航天发射场择机发射,目前任务各系统已经做好了发射前的准备工作。
线上留言
请输入您的姓名或者称呼
请输入联系手机或电话号码
请选择一个问题,不清楚选其他
请输入一个有效的电子邮箱地址
导航菜单