首页 > 解决方案 > 从路由 Laravel 将参数 {id} 粘贴到控制器中

问题描述

我有一条路线:

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);并且搜索和编辑每个刀片文件我不能。

标签: phplaravel

解决方案


根据您的以下路线:

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]);

推荐阅读