Laravel动态导航路径异常:进入博客详情后菜单带/blog前缀
已修改源码,问题现已解决。
我为前端页面创建了动态导航,但遇到一个问题:当进入博客菜单项下的某篇文章页面(例如:127.0.0.1:8000/blog/one-post)时,鼠标悬停导航栏的任意菜单项,所有菜单项的路径都会被加上/blog前缀。
页面内容可在管理端添加更多内容元素。
正常路由路径
http://127.0.0.1:8000/homehttp://127.0.0.1:8000/bloghttp://127.0.0.1:8000/abouthttp://127.0.0.1:8000/historyhttp://127.0.0.1:8000/contact
异常路由路径(访问博客文章页面时)
当访问博客文章页面(localhost/laravelprojekt/blog/one-post)时,鼠标悬停菜单项显示的链接变为:
http://127.0.0.1:8000/blog/homehttp://127.0.0.1:8000/blog/bloghttp://127.0.0.1:8000/blog/abouthttp://127.0.0.1:8000/blog/historyhttp://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
相关产品推荐
相关产品推荐

