动态访问 Laravel Blade 模板中对象的属性(字符串转属性名)

在 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
<p>{{ $each_col_array[1] }}: {{ $applicants->$str }}</p>

✅ 优势:

⚠️ 注意事项:

{{ $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])) }}

这比手动拼接字符串更健壮,也支持点号分隔的深层访问。

本文转载于:互联网 如有侵犯,请联系zhengruancom@outlook.com删除。
免责声明:正软商城发布此文仅为传递信息,不代表正软商城认同其观点或证实其描述。