PHP 跨域中間件 v1.3.0 發佈,新增 PSR-15 和 ThinkPHP 支持啦

什麼是 PHP CORS

PHP CORS 是一個 PHP 跨域中間件,全名叫作 「PHP CORS Middleware」,專門用來處理基於 PHP 程序的 CORS 信息問題,主要針對在 PHP 程序中設置跨域信息的支持。php

更新內容

  • 增長 ThinkPHP 5 框架的支持
  • 增長 PSR-15 中間件實例

在 ThinkPHP 5 框架中的使用

只要在 ThinkPHP 5 的項目中依賴 medz/cors 便可。git

配置

在 ThinkPHP 框架中,配置沒有什麼可選你能夠在 config 下面新建一個名爲 cors.php 的文件,或者在某一個模塊下面新建 cors.php 文件,甚至能夠在全局公用配置或者模塊公用配置中進行 cors 爲 key 的配置,其中配置內容請參考 https://github.com/medz/cors#...github

組件是如何支持 ThinkPHP 的

注入代碼參考自 ThinkPHP 官方的拓展包,首先咱們創建 src/ThinkPHP/injection.php 文件,而後在 composer.json 的 autoload 中使用 files 方式對該文件進行加載,代碼以下:json

<?php

declare(strict_types=1);

namespace Medz\Cors\ThinkPHP;

if (!class_exists(\think\Container::class)) {
    return;
}

call_user_func(function (\think\Container $container) {
    $injecter = $container->make(Injecter::class);
    $injecter->register();
}, \think\Container::getInstance());

爲了避免影響其餘框架的使用,優先判斷 ThinkPHP 5 的容器類是否存在,若是存在,執行 call_user_func,使用閉包進行包裝,而後使用容器蛋裏進行 Injector 實例。跨域

使用的 ThinkPHP 5 鉤子

在 ThinkPHP 5 中使用 app_init 鉤子,做用是爲了在框架讀取模塊和全局配置後進行 CORS 服務的單例處理注入到容器中。
而後使用 response_send 在 Response 發送前進行攔截,並對其 CORS 信息的處理!閉包

ThinkPHP 5 的坑

由於框架獨佔了 OPTIONS 請求的綁定以及跨域信息的判斷處理,目前只能經過 response_send 鉤子攔截 Response 實現 CORS 處理!app

ThinkPHP 5.1 的中間件運行機制有問題,且無全局中間件機制。因此沒法經過中間件進行預處理!!!

PSR-15 實例

在組件中有一份 psr-15 的接口中間件實現代碼,類名稱叫作 Medz\Cors\PSR\CorsMiddleware 你能夠用於任何使用 PSR-15 的地方。cors

更多

項目 GitHub:https://github.com/medz/cors 歡迎 Satr! 謝謝!composer

相關文章
相關標籤/搜索