路线没有将我重定向到正确的页面。它只显示相同的页面,但 url 发生了变化

Route isn't redirecting me to the correct page. It just shows me the same page but the url changes

我制作了一个博客模板,但我在制作路线时遇到了问题。当我点击 link 时,它应该将我重定向到文章页面。相反,它只是将我重定向到相同的 page/same 确切位置。 这是我的代码:

<section id="about" class="ts-block" >
    <div id="cards_landscape_wrap-2">
    <div class="container">
        <div class="row">
        @foreach($blogs as $blog)
            <div class="col-lg-4">
                <a href={{route("blogs.show",$blog->slug)}}>
                    <div class="card-flyer"  >
                        <div class="text-box">
                            <div class="image-box ">
                                <img src="{{'/images/blogs/'.$blog->image}}" alt="{{$blog->title}}" class="img-fluid rounded mx-auto d-block" width="100%"/>
                            </div>
                            <div class="text-container">
                                <h6>{{$blog->title}}</h6>
                                <p style="max-width: 18rem;"class="ts-opacity__50">{{Str::limit($blog->description,100)}}</p>
                            </div>
                            <div class="card-footer">
                                        <span class="text-primary font-weight-bold">Read</span>
                            </div>
                        </div>
                    </div>
                </a>
            </div>
            @endforeach
        </div>
    </div>
    </div>
    </section>    

博客控制器 :

public function getArticles()
{
    return view('blog')->with([
        'blogs' => Blog::all(),
    ]);
}

路线 :

Route::get('/blog/', [App\Http\Controllers\BlogController::class, 'index'])->name('blog');
Route::get('blogs/','App\Http\Controllers\BlogController@getArticles')->name('blogs.show');
Route::get('/admin/blog', 'App\Http\Controllers\BlogController@getBlog')->name('admin.blog');
Route::resource('/blog','App\Http\Controllers\BlogController');

应该将我重定向到另一个页面的路由是带有 BlogController@getArticles 的第二个路由。其他路线没问题。

有人可以告诉我我做错了什么吗?

首先,更改您的路线:

Route::get('/blogs/{slug}','App\Http\Controllers\BlogController@getArticles')->name('blogs.show');

然后,在你的函数中:

public function getArticles($slug)
{
    return view('blog')->with([
        'blogs' => Blog::firstWhere('slug', $slug);
    ]);
}

嗯,你的问题有点令人困惑,因为这是代码的预期结果。

您正在调用 'blogs.show' 路由,该路由会将您重定向到博客页面。如果你想为每篇文章创建一个单独的页面,你可以在 laravel.

中使用 Dynamic Rounting

您只需:

在 web.php:

Route::get('blogs/{slug}', 'App\Http\Controllers\BlogController@getArticle')->name('article.show');

在你的控制器中:

public function getArticles($slug)
{

    $article = Blog::where('slug', $slug)->first();
    return view('article')->with([
        'article' => $article,
    ]);
}

之后,<a href={{route("article.show",$blog->slug)}}></a>就可以了。