Laravel 5.4 Blade模板可变变量无法获取description属性求助
解决Laravel 5.4 Blade中可变变量访问模型description属性的问题
我来帮你搞定这个问题!其实核心是你用错了动态访问模型属性的语法,咱们直接上解决方案:
修改后的可运行Blade代码
@foreach($tableCols as $tableCol) <?php $name = $tableCol['name']; ?> <td>{{ $model->{$name} }}</td> @endforeach
或者更简洁,不用单独赋值变量:
@foreach($tableCols as $tableCol) <td>{{ $model->{$tableCol['name']} }}</td> @endforeach
为什么原来的写法会报错?
你之前用的$$name是PHP的可变变量语法,它的逻辑是:如果$name的值是'description',那$$name就等价于直接调用$description——但这个$description变量在你的模板上下文里根本没定义,自然会抛出「Undefined variable: description」的错误。
而Laravel模型的属性(比如$model->description)是通过模型的魔术方法__get()动态获取的,并不是普通的PHP变量。所以要动态访问模型属性,得用大括号包裹变量名的写法$model->{$name},这种写法会告诉PHP:你要访问的是$model对象中,名称等于$name变量值的那个属性,而不是去寻找一个叫$description的普通变量。
额外小提示
你原来模板里的{{ $name = $tableCol['name']}}会把赋值的结果(也就是属性名)直接输出到页面上,这应该不是你想要的,所以改成PHP标签赋值或者直接在属性访问里用$tableCol['name']更合理。
内容的提问来源于stack exchange,提问作者user908759
相关产品推荐
相关产品推荐

