如何解决Laravel Blade,通过@include传递函数而不检查主视图中是否存在
我正在学习Laravel(和PHP)并在Blade中创建视图。因为我将拥有许多非常相似的视图,所以我想将尽可能多的格式保留在可重用文件中,并通过一些变量来针对每个文件进行自定义。在大多数情况下,此方法效果很好,但是在需要将函数传递给包含的视图时失败。
show.blade
@include('_twocol_row_content',[
'field' => 'Content','value' => $entry->blocks,'interface' => blockDisplay()
])
_twocol_row_content.blade
@extends('_twoCol_row_base')
@section('field')
{{ $field }}
@overwrite
@section('value')
@foreach ($value as $instance)
<p>{{ $instance->$interface }}</p>
@endforeach
@overwrite
这在$ interface有直接关系并且可以作为字符串(例如'title')传递时起作用,但是在传递函数时失败,并显示“调用未定义函数错误”,因为该函数仅被定义在foreach循环开始之后。我已经尝试了所有可以想到的方法,并且可以在Internet上进行搜索,但是还没有找到一种使之起作用的方法。如果我将每个循环的整体直接放在视图中,则内容可以正确呈现,但是我失去了包含文件中所有格式的好处。
我尝试过:
- 封装为字符串(例如'blockDisplay()'),以呈现视图,但不呈现foreach循环内容。
- 包装在一个isset中,该isset在其他区域也有效,但由于无法使用函数进行评估而失败
- 将函数名称作为字符串传递,然后将其连接到括号中,以将其定义为包含文件中的函数(与上面的字符串函数相同) 编辑
- 将_twocol_row_content.blade更改为仅查找
{{$ interface}}
并将$ instance变量传递为$ instance-> blockDisplay()失败,因为未定义实例。将$ instance包裹在isset中会呈现页面,但不会呈现内容。
如何在不失去在单个文件中定义包装html的好处的情况下呈现任何自定义函数?
解决方法
您可以尝试
使用以下命令调用对象/集合值:$variable->{$field}
或具有方法:$variable->{method}()
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。