Laravel 更改 URL 姓名详细信息
Laravel Change URL name detail
如何使 post 单一 URL 像 myweb.com/post-name 而不是 myweb.com/post-id ?它适用于 posts id,但不适用于 post 名称。
这是我当前的路线。
Route::get('/{id}', [App\http\Controllers\PostController::class, 'show']);
这是我的控制器。
public function show($id)
{
$post = post::find($id);
return view('detail', ['post' => $post]);
}
谢谢。
那是因为您使用 $id
作为标识符来解析 post 对象:
myweb.com/25
然后:
public function show($id) // $id = 25
{
$post = post::find($id); // find() search for the PK column, "id" by default
return view('detail', ['post' => $post]);
}
如果您想通过不同的字段解析 $post
,请执行以下操作:
public function show($name)
{
$post = post::where('name', $name)->first();
return view('detail', ['post' => $post]);
}
这应该适用于这样的路线:
myweb.com/a-cool-post-name
附带说明一下,您可以使用 Route Model Binding.
自动解析模型
如何使 post 单一 URL 像 myweb.com/post-name 而不是 myweb.com/post-id ?它适用于 posts id,但不适用于 post 名称。
这是我当前的路线。
Route::get('/{id}', [App\http\Controllers\PostController::class, 'show']);
这是我的控制器。
public function show($id)
{
$post = post::find($id);
return view('detail', ['post' => $post]);
}
谢谢。
那是因为您使用 $id
作为标识符来解析 post 对象:
myweb.com/25
然后:
public function show($id) // $id = 25
{
$post = post::find($id); // find() search for the PK column, "id" by default
return view('detail', ['post' => $post]);
}
如果您想通过不同的字段解析 $post
,请执行以下操作:
public function show($name)
{
$post = post::where('name', $name)->first();
return view('detail', ['post' => $post]);
}
这应该适用于这样的路线:
myweb.com/a-cool-post-name
附带说明一下,您可以使用 Route Model Binding.
自动解析模型