Laravel 5.4 Blade模板两段代码差异及最优用法咨询
Laravel Blade @if 语句的语法差异解析
先直接拆解两段代码的核心区别,以及第二段报错的根本原因:
两段代码对比
第一段(正确可运行的写法):
@if ( auth()->check() ) Welcome {{ Auth::user()->name }}
第二段(会触发语法错误的写法):
@if ( {{auth::check() }} ) Welcome {{ Auth::user()->name }}
关键差异与报错原因
Blade指令的语法规则:
Blade的@if这类逻辑指令本身就是用来嵌入PHP判断逻辑的,括号里直接写合法的PHP表达式即可,完全不需要额外用{{ }}包裹。
而{{ }}是Blade专门用来把变量/表达式的结果输出到HTML页面的语法,它会被编译成PHP的echo语句,本质是输出用的,不是用来写逻辑判断的。第二段代码的致命问题:
你在@if的判断条件里嵌套了{{ }},这会让Blade编译出完全无效的PHP代码。编译后的代码大概是这个样子:<?php if( <?php echo auth::check(); ?> ) : ?> Welcome <?php echo e(Auth::user()->name); ?>这种嵌套的PHP标签完全不符合语法规范,直接会触发语法报错。
推荐用法
第一段的写法是标准且正确的。另外补充个小细节:auth()->check()(辅助函数调用)和Auth::check()(门面类调用)功能完全一致,不过建议保持大小写统一,使用首字母大写的Auth::check()更符合Laravel门面的命名习惯。
内容的提问来源于stack exchange,提问作者DENNIS KITHINJI
相关产品推荐
相关产品推荐

