web.php报错Cannot use positional argument after named argument
错误原因
这是PHP 8.0及以上版本的语法规则限制:函数传参时,只要前面使用了参数名: 值的命名参数格式,后续所有参数都必须同样使用命名参数格式传递,不能再使用省略参数名、按参数位置传值的位置参数,否则就会抛出Cannot use positional argument after named argument错误。
你的代码中,Route::get()的第一个参数使用了命名参数写法uri: 'scraper',但第二个参数直接传入控制器方法数组,没有指定对应参数名,属于位置参数,因此触发报错。
修复方案
两种修复方式任选其一即可:
- 全量使用位置参数(Laravel路由的常规写法,最推荐)
去掉路由定义里多余的命名参数前缀,统一按参数位置传值即可:Route::get('scraper', [\App\Http\Controllers\ScraperController::class, 'scraper'])->name('scraper'); - 全量使用命名参数
如果要保留命名参数写法,给Route::get()的第二个参数补上对应的参数名action,链式调用的name()方法传参保持格式统一即可:Route::get(uri: 'scraper', action: [App\Http\Controllers\ScraperController::class, 'scraper'])->name(name: 'scraper');
内容的提问来源于stack exchange,提问作者ilayda
相关产品推荐
相关产品推荐

