Laravel Blade模板PHP标签语法错误导致前端显示源码问题
Laravel 阿拉伯语环境按需加载rtl.css 语法修复
原有错误代码
style.blade.php(存在语法错误版本)
<link rel="stylesheet" href="{{ asset('assets/vendor/libs/bootstrap/bootstrap.min.css') }}"> <link rel="stylesheet" href="{{ asset('assets/vendor/libs/fontawesome/fontawesome.min.css') }}"> <link rel="stylesheet" href="{{ asset('assets/vendor/libs/toastr/toastr.min.css') }}"> <link rel="stylesheet" href="{{ asset('assets/vendor/libs/simplebar/simplebar.min.css') }}"> <link rel="stylesheet" href="{{ asset('assets/css/extra/colors.css') }}"> <link rel="stylesheet" href="{{ asset('assets/css/extra/extra.css') }}"> @stack('styles_libs') <link rel="stylesheet" href="{{ asset('assets/css/application.css') }}"> @stack('styles') <link rel="stylesheet" href="{{ asset('assets/css/extra/custom.css') }}"> <?php if($language->code =="ar") ?> <link rel="stylesheet" href="{{ asset('assets/css/rtl.css') }}"> <?php endif; ?>
front.blade.php(引入逻辑正常无需修改)
<!DOCTYPE html> <html lang="{{ str_replace('_', '-', app()->getLocale()) }}"> <head> @include('frontend.includes.head') @include('frontend.includes.styles') </head>
错误原因
- 原生PHP控制流写法错误:使用
if(...) : endif的替代语法时,if语句末尾缺少必须的冒号:,导致PHP无法正常解析代码块,直接将PHP代码作为文本输出到前端页面。 - Blade模板中混写原生PHP标签容易出现语法疏漏,优先使用Blade内置指令可大幅降低这类错误概率。
修复方案
推荐写法:使用Blade @if 指令
直接替换原有的原生PHP判断段,Blade会自动完成编译,语法更简洁不易出错,修正后完整style.blade.php代码如下:
<link rel="stylesheet" href="{{ asset('assets/vendor/libs/bootstrap/bootstrap.min.css') }}"> <link rel="stylesheet" href="{{ asset('assets/vendor/libs/fontawesome/fontawesome.min.css') }}"> <link rel="stylesheet" href="{{ asset('assets/vendor/libs/toastr/toastr.min.css') }}"> <link rel="stylesheet" href="{{ asset('assets/vendor/libs/simplebar/simplebar.min.css') }}"> <link rel="stylesheet" href="{{ asset('assets/css/extra/colors.css') }}"> <link rel="stylesheet" href="{{ asset('assets/css/extra/extra.css') }}"> @stack('styles_libs') <link rel="stylesheet" href="{{ asset('assets/css/application.css') }}"> @stack('styles') <link rel="stylesheet" href="{{ asset('assets/css/extra/custom.css') }}"> {{-- 阿拉伯语环境加载RTL样式 --}} @if($language->code === 'ar') <link rel="stylesheet" href="{{ asset('assets/css/rtl.css') }}"> @endif
可选优化:不依赖$language变量的通用判断
如果不想依赖视图传递的$language变量,可以直接调用Laravel的本地化方法获取当前语言代码判断,兼容性更强:
@if(app()->getLocale() === 'ar') <link rel="stylesheet" href="{{ asset('assets/css/rtl.css') }}"> @endif
原生PHP修正写法(不推荐)
如果必须使用原生PHP语法,补全if语句后的冒号即可修复语法错误:
<?php if($language->code == "ar"): ?> <link rel="stylesheet" href="{{ asset('assets/css/rtl.css') }}"> <?php endif; ?>
注意:
front.blade.php中的模板引入逻辑没有问题,不需要做任何修改,修复style.blade.php中的判断语法后即可正常实现阿拉伯语环境下自动加载rtl.css的效果。
内容的提问来源于stack exchange,提问作者Yassin
相关产品推荐
相关产品推荐

