neomerx / cors-illuminate
CORS (跨源资源共享) 支持 Laravel 和 Lumen
Requires
- php: >=7.2.0
- illuminate/http: ^6.0
- neomerx/cors-psr7: ^2.0
- psr/http-message: ^1.0
- psr/log: ^1.0
Requires (Dev)
- mockery/mockery: ^1.3
- phpmd/phpmd: ^2.8
- phpunit/phpunit: ^8.0
- scrutinizer/ocular: ^1.7
- squizlabs/php_codesniffer: ^3.0
README
描述
此包为 Laravel 应用程序添加了 跨源资源共享 (CORS) 支持。
该包基于 框架无关 (PSR-7) CORS 实现。
当前版本 V3 为 Laravel 6 或更高版本设计。如果您使用的是较低版本的 Laravel,请使用 V2。
安装
1 Composer
composer require neomerx/cors-illuminate
2.1 Laravel
对于 Lumen,跳过此步骤并查看步骤 2.2
通过执行以下命令创建配置文件:
php artisan vendor:publish --provider="Neomerx\CorsIlluminate\Providers\LaravelServiceProvider"
它将在您的应用程序中创建 config/cors-illuminate.php
文件。
在 app/Http/Kernel.php
文件中将 CORS 中间件添加到您的 HTTP 栈中。中间件应添加到 $middleware
列表中,该列表用于执行所有路由(即使不在您的路由文件中声明)。出于性能考虑,最好在 '重' 中间件之前添加。
class Kernel extends HttpKernel { ... protected $middleware = [ \Illuminate\Foundation\Http\Middleware\CheckForMaintenanceMode::class, \Neomerx\CorsIlluminate\CorsMiddleware::class, // <== add this line ... ]; ... }
然后查看第 3 步
2.2 Lumen
对于 Laravel,跳过此步骤
在 bootstrap/app.php
中将 CORS 添加到全局中间件列表中
$app->middleware([ ... \Neomerx\CorsIlluminate\CorsMiddleware::class, ]);
并注册 CORS 提供者
$app->register(\Neomerx\CorsIlluminate\Providers\LumenServiceProvider::class);
由于 Lumen 不支持 vendor:publish
命令,因此需要手动将文件 vendor/neomerx/cors-illuminate/config/cors-illuminate.php
复制到 config/cors-illuminate.php
。
然后查看第 3 步
3 配置
配置文件 已进行了详尽的注释,因此很容易为您自己的需求进行设置。您需要首先配置的设置是服务器源 (URL) 和允许的源
... /** * Could be string or array. If specified as array (recommended for * better performance) it should be in parse_url() result format. */ Settings::KEY_SERVER_ORIGIN => [ 'scheme' => 'http', 'host' => 'localhost', 'port' => 1337, ], /** * A list of allowed request origins (no trail slashes). * If value is not on the list it is considered as not allowed. * If you want to allow all origins remove/comment this section. */ Settings::KEY_ALLOWED_ORIGINS => [ 'http://localhost:4200', ], ...
异常和 CORS 头部
当抛出异常并在 Laravel/Lumen 异常处理器 中创建响应时,中间件将被排除在处理响应之外。这意味着 CORS 中间件不会将其 CORS 头部添加到响应中。因此,CORS 结果(包括头部)注册在 Laravel/Lumen 容器 中,并使任何应用程序部分(包括异常处理器)都可以访问。
读取 CORS 头部的代码示例
use Neomerx\Cors\Contracts\AnalysisResultInterface; $corsHeaders = []; if (app()->resolved(AnalysisResultInterface::class) === true) { /** @var AnalysisResultInterface $result */ $result = app(AnalysisResultInterface::class); $corsHeaders = $result->getResponseHeaders(); }
自定义
此包提供多种方法来自定义其行为。
以下类 CorsMiddleware
的方法可以在派生类中替换
getResponseOnError
您可以覆盖此方法以自定义错误回复。getCorsAnalysis
您可以覆盖此方法以修改 CORS 分析结果保存到 Illuminate 容器的方式。getRequestAdapter
您可以覆盖此方法以替换IlluminateRequestToPsr7
适配器。
此外,可以通过以下方式注入自定义 AnalysisStrategyInterface
- 通过覆盖 Laravel/Lumen 的
ServiceProvider
中的getCreateAnalysisStrategyClosure
方法 - 使用 Laravel/Lumen 容器绑定 对接口
AnalysisStrategyInterface
此外,可以通过以下方式注入自定义 AnalyzerInterface
- 通过覆盖 Laravel/Lumen 的
ServiceProvider
中的getCreateAnalyzerClosure
方法 - 使用Laravel/Lumen 容器绑定进行
AnalyzerInterface
接口的使用
测试
composer test
贡献
欢迎提交关于文档和代码改进(PSR-2,测试)的拉取请求。
版本管理
本软件包使用语义化版本控制。
许可证
Apache许可证(版本2.0)。请参阅许可证文件以获取更多信息。