Laravel中如何将Blade页面的点赞类型参数传递给控制器postLike方法
问题根因
你前端点赞按钮的URL中传递的查询参数名为type,但控制器postLike方法中使用request('like')取值,二者参数名不匹配,导致无法动态获取点赞类型。
修复步骤
- 修改控制器取值逻辑
将postLike方法中的取值代码替换为匹配的参数名:
// 替换原代码 $like = request('like'); $like = request('type');
- 修复字段自增的变量解析问题
你当前自增字段的代码使用了单引号包裹变量模板,PHP单引号不会解析内部变量,需要改为双引号:
// 替换原代码 $article->increment('like_{$like}'); $article->increment("like_{$like}");
- 可选优化:增加参数合法性校验(推荐)
为了避免传入非法的点赞类型导致数据库报错,可以在取值后增加校验逻辑:
$allowTypes = ['heart', 'finger']; if (!in_array($like, $allowTypes)) { return response()->json([ 'message' => '不支持的点赞类型' ], 400); }
可选替代方案:把点赞类型放到路由路径中
如果不想用查询参数传值,也可以直接把类型写到路由路径里:
- 修改web.php路由定义:
Route::get('article/{id}/like/{type}', 'App\Http\Controllers\ArticleController@postLike');
- 修改控制器方法定义:
public function postLike($id, $type) { $like = $type; // 后续逻辑保持不变 }
- 修改blade模板的按钮链接:
<a href="/article/{{ $article->id }}/like/heart" class="btn btn-primary">Like Heart</a> <a href="/article/{{ $article->id }}/like/finger" class="btn btn-primary">Like Finger</a>
内容的提问来源于stack exchange,提问作者chu
相关产品推荐
相关产品推荐

