Laravel Blade, 通过@include传递一个函数而不检查它是否存在于主视图中

Laravel Blade, Pass a function through @include without checking if it exists in main view

我正在学习 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 循环开始后定义。我已经尝试了所有我能想到的方法,并在互联网上进行了搜索,但还没有找到让它发挥作用的方法。如果我将每个循环的整体直接放在视图中,内容将正确呈现,但我失去了作为包含文件的一部分的所有格式的好处。

我试过:

如何在不失去在单个文件中定义包装 html 的好处的情况下呈现任何自定义函数?

你可以试试这个

使用此调用 object/collection 值:$variable->{$field}

或object/collection有方法:$variable->{method}()