thinkphp 5.1 解决跨域

前端时间分享了Spring Boot下如果解决跨域的问题(https://itinfor.cn/archives/2164),今天分享下ThinkPHP 5.1下的解决方案

方案一

在入口文件内追加如下代码,如下图所示

具体内容如下

//设置跨域请求
header('Access-Control-Allow-Origin: *');
header("Access-Control-Allow-Headers: Origin, X-Requested-With, Content-Type, Accept");
header('Access-Control-Allow-Methods: GET, POST, PUT, DELETE, OPTIONS');

方法二(推荐)
借助中间件
1、在该目录下新建一个文件application/http/middleware/AllowCrossDomain.php,如下图所示,文件名称可自定义

具体内容如下

<?php

namespace app\http\middleware;

/**
 * 跨域
 */
class AllowCrossDomain
{

    public function handle($request, \Closure $next)
    {

        header('Access-Control-Allow-Origin: *');
        header("Access-Control-Allow-Headers: Authorization, Sec-Fetch-Mode, DNT, X-Mx-ReqToken, Keep-Alive, User-Agent, If-Match, If-None-Match, If-Unmodified-Since, X-Requested-With, If-Modified-Since, Cache-Control, Content-Type, Accept-Language, Origin, Accept-Encoding");
        header('Access-Control-Allow-Methods: GET, POST, PATCH, PUT, DELETE');
        header('Access-Control-Max-Age: 1728000');
        if (strtoupper($request->method()) == "OPTIONS")
        {
            return response();
        }

        return $next($request);
    }
}

2、使用该中间件

在application/middleware.php下引入该中间件,如下图所示

具体内容如下

<?php

return [
    app\http\middleware\AllowCrossDomain::class
];
其中的AllowrossDomain和1创建的文件名保持一致即可,当然下面的写法也是可以的,但是点击的时候,无法跳转到定义的地方
<?php

return [
    'AllowCrossDomain'
];

更多内容详见官方文档:
https://www.kancloud.cn/manual/thinkphp5_1/489844

Tagged ,