PHP CodeIgniter4框架前后端分离跨域解决
方案一:
修改system/CodeIgniter.php
文件
if ($this->request->getMethod() === 'options') {
$this->response
->setHeader('Access-Control-Allow-Origin', '*')
->setHeader('Access-Control-Allow-Method', '*')
->setHeader('Access-Control-Allow-Headers', '*')
->setStatusCode(200,'OK');
}else{
$this->response = $this->handleRequest($routes, config(Cache::class), $returnResponse);
}
方案二:
- 添加
app/Filters/CorsFilter.php
文件
<?php
namespace App\Filters;
use CodeIgniter\HTTP\RequestInterface;
use CodeIgniter\HTTP\ResponseInterface;
use CodeIgniter\Filters\FilterInterface;
class CorsFilter implements FilterInterface
{
// 前置过滤器
public function before(RequestInterface $request, $arguments = null)
{
$response = service('response');
$response->setHeader('Access-Control-Allow-Origin', '*');
$response->setHeader('Access-Control-Allow-Method', '*');
$response->setHeader('Access-Control-Allow-Headers', '*');
if($request->getMethod(FALSE)=='options'){
return $response->setStatusCode(200,'OK');
}
}
//--------------------------------------------------------------------
// 后置过滤器
public function after(RequestInterface $request, ResponseInterface $response, $arguments = null)
{
// Do something here
}
}
- 修改
app/Config/Filters.php
文件
public array $aliases = [
'cors' => App\Filters\CorsFilter::class,
...
];
public array $globals = [
'before' => [
'cors',
...
],
'after' => [
...
],
];