Laravel Livewire组件传参遇Undefined variable $name错误,如何解决?
调用组件的视图未定义
$name变量
你在blade中使用@livewire('counter', ['name' => $name])时,当前视图根本不存在$name变量。比如控制器返回视图时未传递$name,或是在blade里没提前给$name赋值。
排查:在调用Livewire组件的位置上方添加{{ dd($name) }},如果报错就说明确实未定义。解决方法是在控制器中通过return view('xxx', compact('name'))传递变量,或是在blade里手动赋值(比如@php $name = '测试名称'; @endphp)。变量名拼写错误
检查所有涉及$name的环节:控制器传递的变量名是不是$name?blade里写的是不是$name?组件mount方法的参数是不是$name?比如控制器传的是$username,结果blade里误用$name,或是拼写成$naem,这类低级错误很容易出现。Livewire 3的Props声明问题
如果你用的是Livewire 3,虽然通过mount接收参数可行,但更规范的方式是给public属性加上#[Prop]注解:use Livewire\Attributes\Prop; class Counter extends Component { public $counter = 0; #[Prop] public $name; // 无需mount方法,Livewire会自动为$name赋值 public function render() { return view('livewire.counter'); } }旧的
mount方式理论上也能生效,但如果是版本兼容问题,可以尝试这种写法。视图/组件缓存问题
Laravel的视图缓存或Livewire的组件缓存可能导致修改未生效,试试清理缓存:php artisan view:clear php artisan livewire:clear嵌套视图/组件的变量作用域问题
如果是在@include的子视图、组件插槽或嵌套组件里调用Livewire,要确保$name能传递到当前作用域。比如使用@include时要显式传变量:@include('sub-view', ['name' => $name]),否则子视图里会找不到$name。
内容的提问来源于stack exchange,提问作者Gilles Ashley

