You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Laravel动态导航路径异常:进入博客详情后菜单带/blog前缀

已修改源码,问题现已解决。

我为前端页面创建了动态导航,但遇到一个问题:当进入博客菜单项下的某篇文章页面(例如:127.0.0.1:8000/blog/one-post)时,鼠标悬停导航栏的任意菜单项,所有菜单项的路径都会被加上/blog前缀。

页面内容可在管理端添加更多内容元素。

正常路由路径

  • http://127.0.0.1:8000/home
  • http://127.0.0.1:8000/blog
  • http://127.0.0.1:8000/about
  • http://127.0.0.1:8000/history
  • http://127.0.0.1:8000/contact

异常路由路径(访问博客文章页面时)

当访问博客文章页面(localhost/laravelprojekt/blog/one-post)时,鼠标悬停菜单项显示的链接变为:

  • http://127.0.0.1:8000/blog/home
  • http://127.0.0.1:8000/blog/blog
  • http://127.0.0.1:8000/blog/about
  • http://127.0.0.1:8000/blog/history
  • http://127.0.0.1:8000/blog/contact

相关代码

routes\web.php

Route::group(['prefix' => 'blog'], function () {
    Route::get('/', [PostController::class, 'index'])->name('posts.index');
    Route::get('/{slug}', [PostController::class, 'show'])->name('posts.show');
});

Route::get('/', HomeController::class)->name('home');
Route::get('/contact', [HomeController::class, 'contact'])->name('pages.contact');
Route::get('/{slug}', [HomeController::class, 'show'])->name('pages.show');

App\Http\Controllers\HomeController.php

class HomeController extends Controller
{

    public function __invoke(Request $request)
    {        
        $featuredPosts = Post::published()->featured()->with('categories')->latest('published_at')->take(4)->get();

        $latestPosts = Post::published()->with('categories')->latest('published_at')->take(12)->get();

        $page = self::pageData('home');

        return view('home', [
            'featuredPosts' => $featuredPosts,
            'latestPosts' => $latestPosts,
            'page' => $page,
        ]);
    }

    public function contact()
    {
        $page = self::pageData('contact');

        return view('pages.show-contact', [
            'page' => $page,
        ]);
    }

    public static function show($slug)
    {
        $page = self::pageData($slug);

        if($page->slug == "home")
        {
            return redirect()->route('home');
        }

        return view('pages.show', [
            'page' => $page,
        ]);
    }

    public static function pageData($slug)
    {
        abort_unless($page = Page::whereSlug($slug)->first(), 404);

        return $page;
    }
}

App\Http\Controllers\PostController.php

class PostController extends Controller
{
    public function index()
    {
        $categories = Category::whereHas('posts', function ($query) {
           $query->published();
        })->take(10)->get();

        $page = self::pageData('blog');

        return view(
            'posts.index',
            [
                'categories' => $categories,
                'page' => $page,
            ]
        );
    }

    public function show($slug)
    {
        abort_unless($post = Post::whereSlug($slug)->first(), 404);

        return view(
            'posts.show',
            [
                'post' => $post
            ]
        );
    }

    public static function pageData($slug)
    {
        abort_unless($page = Page::whereSlug($slug)->first(), 404);

        return $page;
    }
}

resources\views\components\menu.blade.php

@foreach ($menu as $item)
    <li>
        <a href="/{{ $item->slug }}" class="inline-flex items-center hover:text-yellow-900 text-sm text-gray-500">
            {{ $item->name }}
        </a>
    </li>
@endforeach

解决方法

在参数或页面数据库slug字段中指定/符号。

感谢brombeer的帮助。


内容的提问来源于stack exchange,提问作者Fzol

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.29 06:27:18