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

Laravel如何仅在特定视图(post.blade.php)显示导航项

实现仅在特定视图显示导航项的解决方案

看起来你想在Laravel的app.blade.php布局中,只在打开post.blade.php视图时显示"Post New"这个导航项。你之前尝试的@Post和@endPost是自定义指令,但Laravel默认没有这个语法,所以我们可以用几种更简单的方法来实现:

方法1:通过视图名称判断

Laravel的View facade可以获取当前加载的视图名称,我们可以用这个来判断是否是post.blade.php:

@guest
    <li class="nav-item">
        <a class="nav-link" href="{{ route('login') }}">{{ __('Login') }}</a>
    </li>
    @if (Route::has('register'))
        <li class="nav-item">
            <a class="nav-link" href="{{ route('register') }}">{{ __('Register') }}</a>
        </li>
    @endif

    {{-- 仅在post视图显示导航项 --}}
    @if(View::getName() === 'post')
        <div><a href="/p/create">Post New</a></div>
    @endif
@endguest

注意:如果你的post.blade.php放在子目录里(比如resources/views/blog/post.blade.php),视图名称会是blog.post,这时候要把判断条件改成View::getName() === 'blog.post'。

方法2:通过路由名称判断

如果post.blade.php对应的路由有定义名称(比如在web.php里给路由命名),可以通过路由名称来判断:

假设你的路由定义是这样的:

Route::get('/post/{id}', [PostController::class, 'show'])->name('post.show');

那么在布局里可以这样写:

@guest
    <li class="nav-item">
        <a class="nav-link" href="{{ route('login') }}">{{ __('Login') }}</a>
    </li>
    @if (Route::has('register'))
        <li class="nav-item">
            <a class="nav-link" href="{{ route('register') }}">{{ __('Register') }}</a>
        </li>
    @endif

    {{-- 匹配post对应的路由名称 --}}
    @if(Route::currentRouteName() === 'post.show')
        <div><a href="/p/create">Post New</a></div>
    @endif
@endguest

这种方法更灵活,哪怕视图文件名变化,只要路由名称不变,判断逻辑依然有效。

方法3:通过控制器传递变量

在返回post.blade.php的控制器方法里,传递一个标记变量,然后在布局中判断这个变量是否存在:

控制器代码:

public function show($id)
{
    $post = Post::findOrFail($id);
    // 传递标记变量
    return view('post', compact('post'))->with('showPostNav', true);
}

布局代码:

@guest
    <li class="nav-item">
        <a class="nav-link" href="{{ route('login') }}">{{ __('Login') }}</a>
    </li>
    @if (Route::has('register'))
        <li class="nav-item">
            <a class="nav-link" href="{{ route('register') }}">{{ __('Register') }}</a>
        </li>
    @endif

    {{-- 判断是否存在该变量 --}}
    @isset($showPostNav)
        <div><a href="/p/create">Post New</a></div>
    @endisset
@endguest

这种方法最直观,适合需要精确控制显示场景的情况。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.06 15:27:31