Laravel Livewire中如何传递含字符串字面量的ID参数?
问题解决:Livewire组件wire:click传递字符串ID参数报错
错误原因分析
你遇到的错误信息:
livewire.js?id=44144c23:1123 Alpine Expression Error: Unexpected token '>'
Expression: "$wire.markAsRead($notification->id)"
原按钮代码存在两个核心问题:
wire:click属性未闭合双引号,这是触发语法错误的直接原因;- 当
$notification->id为字符串类型时,直接传递变量会导致Livewire解析异常。
你尝试的wire:click="markAsRead('$notification->id')"写法无效,是因为Blade在双引号属性内不会解析单引号包裹的变量,最终传递的是字面量字符串$notification->id而非实际ID值。
正确传递参数的写法
方法1:Blade直接解析变量(推荐)
利用Blade的echo语法直接将ID值注入到方法参数中,Livewire会自动识别参数类型:
wire:click="markAsRead({{ $notification->id }})"
方法2:明确指定字符串类型
如果需要明确传递字符串参数,用单引号包裹解析后的ID值即可:
wire:click="markAsRead('{{ $notification->id }}')"
方法3:使用@this语法
通过@this调用组件方法,同样确保变量被正确解析:
wire:click="@this.markAsRead('{{ $notification->id }}')"
组件方法验证
同时确认你的Livewire组件中的markAsRead方法能正确接收参数,示例代码:
public function markAsRead($notificationId) { // 实现标记通知为已读的逻辑 auth()->user()->notifications()->find($notificationId)->markAsRead(); }
Laravel的Eloquent支持字符串类型的ID查询,无需额外进行类型转换。
内容的提问来源于stack exchange,提问作者mstdmstd
相关产品推荐
相关产品推荐

