Laravel Blade判断首页视图加载对应内容的代码是否正确?
你的Blade判断写法不正确,我来帮你修正!
首先得明确:你用的@if(view('home'))逻辑完全错了——view('home')这个函数的作用是渲染并返回home视图的内容,它永远会返回一个有效的视图实例,在条件判断里会被视为true,所以不管你访问哪个页面,都会显示foo,这就是代码不生效的原因。
下面给你几种靠谱的解决方案,选适合你的就行:
方法1:通过路由名称判断(最推荐)
先确保你的首页路由在routes/web.php里设置了名称:
Route::get('/', function () { return view('home'); })->name('home');
然后在Blade模板里,用Route::currentRouteName()来检查当前路由的名称:
@if(Route::currentRouteName() === 'home') @include('partials.foo') {{-- 首页显示foo --}} @else @include('partials.bar') {{-- 其他页面显示bar --}} @endif
方法2:通过请求路径判断
如果你的首页就是根路径/,可以直接检查当前请求的URI:
@if(request()->is('/')) @include('partials.foo') @else @include('partials.bar') @endif
方法3:手动传递变量到视图
在首页的路由/控制器里,给视图传一个标记变量:
// 首页路由 Route::get('/', function () { return view('home', ['isHomePage' => true]); }); // 其他页面路由示例 Route::get('/contact', function () { return view('contact', ['isHomePage' => false]); });
然后在Blade里判断这个变量:
@if($isHomePage) @include('partials.foo') @else @include('partials.bar') @endif
另外提个小建议:Laravel Blade里引入视图时,更推荐用点.分隔目录,比如partials.foo代替partials/foo,虽然两种写法都能运行,但点语法是框架的标准规范哦~
内容的提问来源于stack exchange,提问作者Carlos Roman
相关产品推荐
相关产品推荐

