Laravel Blade 动态访问对象属性方法
作者:水悠悠予安
时间:2026-03-13
浏览:0
在LaravelBlade模板中,可通过变量名字符串动态访问对象属性(如$applicants->$str),避免使用危险的eval();需确保字符串为合法属性名且对象存在该属性。

在 Laravel Blade 模板中,可通过变量名字符串动态访问对象属性(如 `$applicants->$str`),避免使用危险的 `eval()`;需确保字符串为合法属性名且对象存在该属性。
在 Laravel 开发中,有时需要根据运行时生成的字符串(如列配置、字段映射)来动态读取 Eloquent 模型或数组对象的属性。例如,你有一个配置数组 $each_col_array = ['a.applicant_name_en', 'Name (EN)'],希望去除前缀 'a.' 后,将 'applicant_name_en' 作为属性名从 $applicants 对象中取值。
正确做法是直接使用 PHP 的可变属性语法(Variable Property):
@php
$str = str_replace(['a.', 'b.', 'c.', 'd.'], '', $each_col_array[0]);
@endphp
{{ $each_col_array[1] }}: {{ $applicants->$str }}
✅ 优势:
- 安全:无需 eval(),杜绝代码注入与语法错误风险;
- 简洁:Laravel Blade 原生支持 {{ $obj->$var }} 语法(自 PHP 7.4+ 及 Laravel 8+ 更稳定);
- 高效:底层直接调用对象属性访问器,无额外解析开销。
⚠️ 注意事项:
- $str 必须为合法的属性名(不能含空格、特殊符号或非法前缀);
- 确保 $applicants 已定义且不为 null,否则会触发 Trying to get property 'xxx' of non-object 错误;
- 若属性可能不存在,建议加空合并或条件判断:
{{ $applicants->$str ?? 'N/A' }}
{{-- 或 --}}
@if(isset($applicants->$str))
{{ $applicants->$str }}
@else
—
@endif? 进阶提示:对于更复杂的动态路径(如嵌套属性 profile->address->city),可封装为辅助函数或使用 Laravel 的 data_get() 辅助函数:
{{ data_get($applicants, str_replace(['a.', 'b.', 'c.', 'd.'], '', $each_col_array[0])) }}这比手动拼接字符串更健壮,也支持点号分隔的深层访问。
作者最新文章
灵活计算器
2026-09-16 17:45
苹果折叠屏iPhone预计售价是多少
2026-09-14 13:44
OpenAI GPT-6 Astra 自主通关《传送门》:技术原理与实验成本解析
2026-09-08 19:08
苹果与铠侠签署NAND长期供应协议:3-5年长约与不设价格上限背后的供应链战略
2026-09-08 16:58
PDF转PPT操作指南:在线、本地与批量转换及结果核对
2026-09-04 15:04
上一篇:
12306支付宝代买火车票教程
热门文章
更多
精品专题
更多
Mac软件
更多
WINDOWS
更多


































