在 laravel blade 模板中,无法直接用 `eval()` 解析类似 `”{{$applicants->applicant_name_en}}”` 的字符串,但可通过 php 变量语法 `$object->$property` 安全、高效地实现动态属性访问。
在开发报表、可配置字段列表或通用表格组件时,常需根据字符串动态获取模型属性(如 applicant_name_en),而非硬编码。Laravel 的 Blade 模板虽支持 {{ $obj->field }},但不支持将属性名拼接为字符串后直接插值(如 “{{$obj->$str}}” 在 Blade 编译阶段会报错)。错误示例 不仅语法非法(eval 无法解析 Blade 插值语法),更存在严重安全风险(执行任意代码)且违反 Laravel 最佳实践。
✅ 正确做法是:在 PHP 逻辑层完成动态属性解析,再将结果输出到模板。例如:
@php
// 清洗字段前缀(如移除 'a.', 'b.' 等)
$property = str_replace(['a.', 'b.', 'c.', 'd.'], '', $each_col_array[0]);
@endphp
{{ $each_col_array[1] }}: {{ $applicants->$property }}
或更简洁地(无需额外 @php 块):