如果 <f:debug> returns 字符串而不是对象,如何在 TYPO3 中进行调试?

How to debug in TYPO3 if <f:debug> returns strings instead of object?

在自定义 TYPO3 8.7.12 extbase 扩展中,我无法 f:debug 模板中的项目。

我们在 listAction 控制器中,只需执行以下操作:

    $institutions = $this->institutionRepository->findAll();
    $this->view->assignMultiple([
        'institutions' => $institutions,
        // ... pagination limit ...
        ]
    );

并且在模板中:

 <f:debug>
    {institutions}                            
 </f:debug>

这个returns

如果我用 f:for 遍历 {institutions} 然后 f:debug:

<f:for each="{institutions}" as="institution" iteration="i">
    <f:debug>
      {institution}
    </f:debug>
</f:for>

我得到对象的第一个属性,例如名字。

编辑: 这是由于模型中的 __toString() 魔术方法。如果我删除它,我会得到命名空间和 uid STUBR\Extension\Domain\Model\Institution:55——这看起来又好像没有渲染对象。

等等... php.net 说 The __toString() method allows a class to decide how it will react when it is treated like a string。那么是否可以将对象视为字符串(类型转换?)?

使用属性是正常的,只是在尝试打印整个对象时出现问题。

我应该看哪里?延迟加载?有一些延迟加载属性,但不是很多。或者 class 中可能缺少某些内容?或者是否有解决方法。

PS:

以下方法与 <f:debug> 的工作相同,在我的案例中也类似:

     \TYPO3\CMS\Core\Utility\DebugUtility::debug(
        $var = $variable,
        $header = 'Institutions',
        $group = ''
     );

     \TYPO3\CMS\Extbase\Utility\DebuggerUtility::var_dump(
        $variable,
        $title = 'Institutions', 
        $maxDepth = 8,
        $plainText = FALSE,
        $ansiColors = TRUE,
        $return = FALSE,
        $blacklistedClassNames = NULL,
        $blacklistedPropertyNames = NULL
     );

在列表中执行或在控制器中显示操作。

它不如 f:debug 方便(因为您必须在两个不同的地方完成工作,例如,当您在模板中循环时,您必须转到控制器并构建它再次循环),但这是一个有用的解决方法。

编辑: 我发现这样做就足够了

<f:debug>{var}</f:debug>

在一条线上

回答问题;

<f:debug>{institutions}</f:debug>

将被解析为一个对象,但是 任何 里面的空格都会让它被解析为一个字符串。