我有一条路线:
Route::get('/{id?}/{post}', 'PostController@show')->name('postshow');
我可以从控制器粘贴参数{id}
吗?
public function showPost($id = null, Post $post)
{
$id = $post->id;
return view('post.show', compact('post'));
}
我需要在用户发布时,我需要发布的网址为:http://example.com/12345/post-slug
现在我得到:http://example.com/post-slug
我知道我可以在以下路线中传递ID:route('postshow', [$post->id, $post]);
但是我不能,因为在刀片服务器中我有1000多个这样的记录:route('postshow', $post);
并搜索和编辑所有我无法找到的刀片服务器文件。
答案 0 :(得分:0)
按照您的以下路线:
Route::get('/{id?}/{slug}', 'PostController@show')->name('postshow');
然后在控制器中(不确定我要的是什么,但是根据我对问题的理解:
public function showPost($id = null, $slug)
{
if($id){
$post = Post::findOrFail($id);
}
else{
$post = Post::where('slug', $slug)->firstOrFail();
}
return view('post.show', compact('post'));
}
在刀片中,如果要生成此url:
route('postshow', [ 'id' => $post->id, , 'slug' => $post->slug]);
答案 1 :(得分:0)
您可以像这样将旧路线重定向到新路线:
Route::get('/{post}', function(Post $post) {
return redirect($post->id . "/" . $post->slug );
});
Route::get('/{id?}/{post}', 'PostController@show')->name('postshow');
这会将您的http://example.com/post-slug
的旧请求重定向到http://example.com/12345/post-slug