PHP8升级后模板遍历GroupedList时如何检查Null元素?
解决方案
在循环里先过滤掉Null项,再处理字段访问,避免触发PHP8的类型严格检查报错:
<% loop $indices %> <% if $Me %> <% if $fileName %> $fileName <% end_if %> <% end_if %> <% end_loop %>
细节说明
$Me是SilverStripe模板里代表当前循环项的变量,直接判断$Me就能过滤掉Null值,从根源避免后续访问$fileName时触发method_exists()的类型错误。- 要是你的循环项是数组而非SilverStripe数据对象,可以再加一层数组有效性判断:
<% loop $indices %> <% if $Me && $Me.isArray %> <% if $fileName %> $fileName <% end_if %> <% end_if %> <% end_loop %>
后端预处理方案(可选)
如果不想在模板里做判断,也可以在后端获取数据时提前过滤Null项,比如在控制器里:
public function getIndices() { $apiData = $this->fetchThirdPartyApiData(); // 你的API调用逻辑 // 过滤掉Null元素 return $apiData->filterByCallback(fn($item) => $item !== null); }
内容的提问来源于stack exchange,提问作者Will
相关产品推荐
相关产品推荐

