之前在做三端分离的时候,做CMS遇到了AJAX跨域问题,现在将记录一下thinkphp5.1的解决方法。
thinkphp具体版本为5.1.36
首先在命令行切换到项目文件夹里,输入以下命令生成一个名称为CORS的中间件。
php think make:middleware CORS
生成的中间件位于app\http的文件夹下
打开CORS.php文件,键入以下代码
<?php
/**
* Created by 九城.
* Author: 九城
* QQ : 940993208
*
* Date: 2019/4/17
* Time: 13:31
*/
namespace app\http\middleware;
use think\facade\Request;
class CORS
{
public function handle($request, \Closure $next)
{
header('Access-Control-Allow-Origin: *');
header('Access-Control-Allow-Headers: token,Origin, X-Requested-With, Content-Type, Accept');
header('Access-Control-Allow-Methods: GET, POST, PATCH, PUT, DELETE');
if (Request::isOptions()) {
return response('',200);
}
return $next($request);
}
}
接着需要注册中间件
我这里是在模块下创建middleware.php的配置文件里,写入了以下配置
<?php
// +----------------------------------------------------------------------
// | 中间件配置
// +----------------------------------------------------------------------
return [
\app\http\middleware\CORS::class
];
控制器基类里面添加上middleware
<?php
/**
* Created by 九城.
* Author: 九城
* QQ : 940993208
*
* Date: 2019/4/16
* Time: 23:43
*/
namespace app\api\controller;
use think\Controller;
class BaseController extends Controller
{
protected $middleware = [
'CORS'
];
}
至此就可以使用ajax跨域访问了。