可以捕獲的情況:
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(){}); 嗎,感覺不太方便。。
(另外,希望作者大神能修復(fù)DELETE請求帶Body的奇特問題,可以直接忽略Body的,服務(wù)器不應(yīng)該因為客戶端的任何請求出現(xiàn)問題。。。)
Route::fallback 不支持中間件。
resource跨域需要定義options行為,框架不可能自作主張給你定義一個options路由。
DELETE 請求帶body和get帶body后面會考慮支持
謝謝大神~明白了,剛才調(diào)試又發(fā)現(xiàn)個問題:
Route::group 里定義的 Route::fallback 仍然是全局的?我以為只是在group中起作用,我在兩個group里定義了兩個fallback,誰知只有一個啟用,且是全局的。。。
另外還有一個疑問,路由支持通配符嗎?比如 Route::option('/v1/setting/user/*',。。。),(我估計是不支持的吧)
了解,看來先用這個辦法來解決吧:
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,否則使用路由實現(xiàn)多應(yīng)用時fallback不好單獨配置了。。。