我正在为一个网页的post系统工作,我发现了一个奇怪的交互,所以我想问一下有没有什么方法可以防止这种情况发生。
我的路线:
Route::get('/posts/{post}', ...);
和控制器:
public function show($post)
{
$post = Post::findOrFail($post);
return view('Posts.show', compact('post'));
}
交互是,即使像/ post /2adasdasjndajg这样的东西也可以返回一个ID为2的Post实例,如果它失败了,我会更喜欢它,因为为了找到正确的post,链接中应该只有一个ID。谢谢
发布于 2021-07-13 11:04:31
希望这将是工作参考click
路由
Route::get('/posts/{param}', ...);
控制器
public function show($param)
{
$post = Post::where('id', $param)
->orWhere('slug', $param)
->firstOrFail();
return view('Posts.show', compact('post'));
}
发布于 2021-07-13 12:03:52
使用firstOrFail并在slug和id中搜索,
public function show($post)
{
$post = Post::where('id', $post)->orWhere('slug', $post)->firstOrFail();
return view('Posts.show', compact('post'));
}
发布于 2021-07-13 15:19:24
您可以使用模式将路由参数约束为仅为整数,而不是接受字符串,然后字符串将被转换:
Route::get('posts/{post}', ...)->where('post', '[0-9]+');
Laravel 8.x Docs - Routing - Route Parameters - Regular Expression Constraints where
https://stackoverflow.com/questions/68361041
复制相似问题