如何解决Laravel中出现的‘命名参数后不能使用位置参数’错误?
解决Laravel中"Cannot use positional argument after named argument"错误
嘿,这个问题我之前也踩过坑,咱们一步步理清楚!
错误原因分析
你遇到的这个报错是PHP 8.0+的语法规则限制导致的,核心问题全在compact()的错误调用上:
- 首先,
compact()函数的设计就是接收一系列变量名的字符串作为位置参数,它根本不支持命名参数(比如var_name : 'product'这种写法完全是误用)。 - 其次,你在错误地使用了命名参数(
var_name : 'product'、_ : 'order')之后,又直接加了位置参数'user',这就触发了PHP的硬性规则:一旦使用了命名参数,后面绝对不能再跟位置参数。 - 顺带提一句,
view()里的命名参数写法(view:'admin.dashboard')本身是合法的,但不是Laravel开发者常用的写法,不过这不是报错的根源。
修复方案
只需要修正compact()的调用方式就行,它的正确用法是直接把要打包的变量名以字符串形式传进去,PHP会自动把对应变量的值打包成数组。
修复后的完整代码:
public function index() { $product = new Product(); $order = new Order(); $user = new User(); // 最常用的写法:位置参数传递 return view('admin.dashboard', compact('product', 'order', 'user')); // 如果你坚持想用命名参数(其实没必要,多此一举),也可以这么写: // return view(view: 'admin.dashboard', data: compact('product', 'order', 'user')); }
这样修改后,既符合PHP的语法规则,也贴合Laravel的常规写法,报错自然就消失啦!
内容的提问来源于stack exchange,提问作者G-guy
相关产品推荐
相关产品推荐

