我构建了一个小型博客控制器来将博客添加到我的网站,例如 http://example.com/blog/post
它适用于像这样的帖子ID:http://example.com/blog/1 但它不适用于http://example.com/blog/postTitle
这是我的代码:
路线:
Route::get('/blog/{blogPost}', ['as' => 'blogPost', 'uses' => 'BlogPostController@show']);
BlogPostControler.php :
public function show(BlogPost $blogPost)
{
return view('blog.show', [
'post' => $blogPost,
]);
}
views/blog/index.blade.php :
从这里我链接到博客文章。当我将
<a href="blog/{{ $post->title_slug }}">{{ __('blog.Read more') }}</a>
改回 <a href="blog/{{ $post->id }}">{{ __('blog.Read more') }}</a>
它工作正常
<div class="box">
@forelse($posts as $post)
<ul>
<li>
<h3>{{ ucfirst($post->title) }}</h3>
<p>{!! mb_substr(strip_tags($post->body), 0, 255) !!} ... <a href="blog/{{ $post->title_slug }}">{{ __('blog.Read more') }}</a> </p>
</li>
</ul>
@empty
<p class="text-warning">No blog Posts available</p>
@endforelse
</div>
正如我所说,它与 id 配合得很好。我做错了什么?我想不通。
谢谢大家
我想我必须检查 title_slug 是否适合帖子 ID。但我不知道在哪里。 我使用 Laravel v5.8.3
您可以更改绑定模型时使用的路由键。根据文档:
如果您希望模型绑定在检索给定模型类时始终使用 id 以外的数据库列,您可以重写 Eloquent 模型上的 getRouteKeyName 方法。
public function getRouteKeyName(): string
{
return 'title_slug';
}
将该功能添加到您的
BlogPost
模型后,使用 URL 中的 slug 应该可以工作。