Laravel 5.6 Blade中如何设置页面描述(带默认值)
在Laravel Blade中实现Meta描述的默认值/自定义值切换
嘿,我来帮你搞定这个问题~其实Blade提供了几种简洁可靠的方式来实现你要的逻辑,比你之前尝试的写法更清晰:
方法1:利用@yield的默认值参数(最简洁)
Blade的@yield指令本身就支持第二个参数作为默认值,完美匹配你的需求!直接这么写就行:
<meta name="description" content="@yield('description', config('app.description'))">
- 当你在子视图中通过
@section('description', '这里是自定义描述内容')传递自定义描述时,页面会显示你设置的自定义内容; - 如果没有定义这个
descriptionsection,就会自动使用配置文件config/app.php里的description配置项作为默认值。
方法2:用@hasSection判断(适合需要额外逻辑的场景)
如果你需要更灵活的判断(比如加一些额外的条件),可以用@hasSection指令来检查是否存在指定的section:
<meta name="description" content="@hasSection('description')@yield('description')@else{{ config('app.description') }}@endif">
方法3:通过控制器传递变量的场景
如果你的自定义描述是从控制器传递到视图的变量(比如$description),可以用@isset或者@if来判断:
<!-- 用@isset判断变量是否存在且不为空 --> <meta name="description" content="@isset($description){{ $description }}@else{{ config('app.description') }}@endisset"> <!-- 或者用@if判断 --> <meta name="description" content="@if(!empty($description)){{ $description }}@else{{ config('app.description') }}@endif">
纠正你之前的写法问题
你之前尝试的@if(yield('descrption'))@yield('descrption'):{{config('app.description')}}写法有两个问题:
@yield不能直接作为@if的判断条件,应该用@hasSection来检查section是否存在;- 语法结构不完整,缺少闭合的
@endif,而且冒号的用法也不对。
内容的提问来源于stack exchange,提问作者user1388167
相关产品推荐
相关产品推荐

