如何检测Blade模板中@yield的值?特定页面添加组件类需求
解决Blade模板特定页面添加类的问题
嘿,我来帮你搞定这个问题!你之前的写法之所以没生效,是因为Blade里不能直接把@hasSection和@yield这样拼接做条件判断——@yield是直接输出内容的,没法用来做比较。咱们换几种靠谱的方式来实现:
方法一:正确判断section内容
用View::getSection()来获取pagename区块的内容,再做条件判断,这样就能精准匹配了:
<div class="base-class @if(View::hasSection('pagename') && trim(View::getSection('pagename')) === 'home') myclass @endif "> <!-- 组件内容 --> </div>
这里加trim()是为了避免区块内容不小心带了空格导致判断失效,更稳妥。
方法二:通过视图/路由名称判断(更省心)
如果你不想依赖pagename区块,还可以直接用当前页面的视图名称或者路由名称来判断,不用额外定义区块:
用视图名称
<div class="base-class @if(View::getName() === 'home') myclass @endif"> <!-- 组件内容 --> </div>
这里的home就是你home页面视图文件的名称(比如home.blade.php对应的名称就是home)。
用路由名称
如果你的路由定义了名称(比如Route::get('/', HomeController::class)->name('home')),也可以这么写:
<div class="base-class @if(request()->route()->getName() === 'home') myclass @endif"> <!-- 组件内容 --> </div>
方法三:直接在页面传递额外类名(更灵活)
主模板里预留一个用于额外类的区块:
<div class="base-class @yield('extra-class')"> <!-- 组件内容 --> </div>
然后在home页面的模板里,直接给这个区块赋值:
@section('extra-class', 'myclass')
其他页面不需要加类的话,完全不用管这个区块,非常灵活。
这几种方法都能解决你的问题,选最适合你项目结构的就行~
内容的提问来源于stack exchange,提问作者Orange Lux
相关产品推荐
相关产品推荐

