Laravel 博客 - 规范路由不起作用

问题描述 投票:0回答:1

我构建了一个小型博客控制器来将博客添加到我的网站,例如 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

php laravel routes blogs
1个回答
0
投票

您可以更改绑定模型时使用的路由键。根据文档

如果您希望模型绑定在检索给定模型类时始终使用 id 以外的数据库列,您可以重写 Eloquent 模型上的 getRouteKeyName 方法。

public function getRouteKeyName(): string
{
    return 'title_slug';
}

将该功能添加到您的

BlogPost
模型后,使用 URL 中的 slug 应该可以工作。

© www.soinside.com 2019 - 2024. All rights reserved.