可以捕获的情况:
Route::group('/adminapi', function() {
Route::options('/v1/setting/user', [app\controller\adminapi\v1\setting\UserController::class, 'index']);
//或者:Route::any('/v1/setting/user', [app\controller\adminapi\v1\setting\UserController::class, 'index']);
。。。
})->middleware([\app\middleware\AccessControlMiddleware::class]);
上面两种情况,中间件可以正常捕获到option请求,但有一种情况:
Route::group('/adminapi', function() {
Route::resource('/v1/setting/user', [app\controller\adminapi\v1\setting\UserController::class, ''index', 'show', 'store', 'update', 'destroy'']);
。。。
Route::fallback(function() {
echo "fallback: " . request()->method() . PHP_EOL;
return ret_value(-1, "404", null, 404);
});
})->middleware([\app\middleware\AccessControlMiddleware::class]);
却无法在中间件或fallback中获得option请求,直接返回跨域错误。请问如果需要resource处理跨域,则必须在resource下面加上 Route::options('/v1/setting/user', function(){}); 吗,感觉不太方便。。
(另外,希望作者大神能修复DELETE请求带Body的奇特问题,可以直接忽略Body的,服务器不应该因为客户端的任何请求出现问题。。。)
Route::fallback 不支持中间件。
resource跨域需要定义options行为,框架不可能自作主张给你定义一个options路由。
DELETE 请求带body和get带body后面会考虑支持
谢谢大神~明白了,刚才调试又发现个问题:
Route::group 里定义的 Route::fallback 仍然是全局的?我以为只是在group中起作用,我在两个group里定义了两个fallback,谁知只有一个启用,且是全局的。。。
另外还有一个疑问,路由支持通配符吗?比如 Route::option('/v1/setting/user/*',。。。),(我估计是不支持的吧)
Route::fallback
是全局的。支持
Route::option('/v1/setting/user/{id}',。。。)
这种了解,看来先用这个办法来解决吧:
Route::resource('/v1/setting/user', app\controller\adminapi\v1\setting\UserController::class, ['index', 'show', 'store', 'update', 'destroy']);
Route::options('/v1/setting/user[/{id}]', function(){});
另外希望有局部的fallback,否则使用路由实现多应用时fallback不好单独配置了。。。