【发布时间】:2021-08-02 00:27:56
【问题描述】:
我有两条接受可选参数的路由:
Route::get('application/cedula/{cedula}/{view?}/{model?}', 'App\Http\Controllers\ApplicationController@getCedulaInformationFromPublicServices')->name('application.cedula');
Route::post('application/cedula/{cedula}/verification/{code?}', 'App\Http\Controllers\ApplicationController@verifyApplicationCode')->name('application.confirm');
public function verifyApplicationCode( Request $request, String $cedula, String $code = NULL ) {...}
public function getCedulaInformationFromPublicServices( String $cedula, String $view = NULL, String $model = NULL){...}
当我向 application/cedula/0001001010/verification 发出 POST 请求时,没有可选参数 "{code?}",它会进入 GET 路由。
我知道它将 "verification" 作为可选参数 {view?} 传递给 GET 端点,但 resquest 类型是否足以区分尽管端点名称相似,但要遵循哪一个。
【问题讨论】:
-
application/cedula/0001001010与post路由不匹配,因为它必须是application/cedula/0001001010/verification -
@apokryfos 对不起,端点确实有/verification,我只是在问题中错过了。
-
不直接支持链接多个可选参数。如果您做了
/example,但希望example成为模型,而不是视图,则代码无法处理。您可以执行/null/example并将字符串'null'处理为view,但此时,此参数不是可选的... -
两个路由都将匹配
application/cedula/0001001010/verification,因此您需要注意可能发生的任何重定向(例如 HTTP 到 HTTPS 重定向或验证失败重定向),因为重定向会将 POST 请求更改为 GET。在浏览器中检查您的开发者控制台,看看是否发生了重定向
标签: laravel laravel-8 laravel-routing