首页 > 解决方案 > 我无法获得完整的 slug/post 路线

问题描述

我正在尝试创建一个博客,当尝试显示上一条记录和下一条记录时,这将返回“帖子”,而不是应该是 / single / {slug} 的完整路径

控制器

  public function single($slug)
    {
        $post = Post::where('slug', $slug)->first();
        $previous = Post::where('id', '<', $post->id)->orderBy('id', 'asc')->where('status', 'PUBLISHED')->first();

        $next = Post::where('id', '>', $post->id)->orderBy('id')->where('status', 'PUBLISHED')->first();

        return view('web.single')->with(compact('post', 'previous', 'next'));
    }

看法

@if (isset($previous))
                <div class="alert alert-success">
                <a href="{{ url($previous->slug) }}">
                    <div class="btn-content">
                        <div class="btn-content-title"><i class="fa fa-arrow-left"></i> Previous Post</div>
                        <p class="btn-content-subtitle">{{ $previous->title }}</p>
                    </div>
                </a>
                </div>
            @endif
        </div>
        <div class="col-md-6">

            @if (isset($next))
            <div class="alert alert-success">
            <a href="{{ url($next->slug) }}">
                <div class="btn-content">
                    <div class="btn-content-title">Next Post <i class="fa fa-arrow-right"></i></div>
                    <p class="btn-content-subtitle">{{ $next->title }}</p>
                </div>
            </a>
            </div>
            @endif

路线

Route::get('/single/{slug}', 'Web\WorkController@single')->name('single');

点击上一个或下一个时,浏览器显示的路由是http://127.0.0.1:8000/et-autem-tempora ,应该是 http://127.0.0.1:8000/single/et-autem-tempora

标签: phpmysqllaravelslug

解决方案


您正在创建您的网址:

<a href="{{ url($next->slug) }}">
    ...
</a>

url('path')助手返回如下内容: http://{base_url}/{path}.

尝试改用您的命名路线:

<a href="{{ route('single', ['slug' => $next->slug]) }}">
    ...
</a>

我认为这也应该有效:

<a href="{{ route('single', $next->slug) }}">
    ...
</a>    

推荐阅读