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



在自定义Typo3 8.7.12 extbase Extension我无法在模板中 f:debug项目。

我们在ListAction控制器中,只是做:

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

和模板中:

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

这返回

  • 有时在流体调试器中的字符串"数组"(现在不能再现(
  • 当代码在3行上时:#1273753083: Cannot cast object of type "TYPO3CMSExtbasePersistenceGenericQueryResult" to string.
  • #1273753083: Cannot cast object of type "TYPO3CMSExtbasePersistenceGenericLazyObjectStorage" to string.
  • 当代码在1行上:#1234386924: Cannot create empty instance of the class "TYPO3CMSExtbasePersistenceObjectStorage" because it does not implement the TYPO3CMSExtbaseDomainObjectDomainObjectInterface.

如果我使用 f:for循环{机构},然后 f:debug

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

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

编辑:这是由于模型中的__toString()魔法。如果我删除它,相反,我会得到名称空间和uid STUBRExtensionDomainModelInstitution:55 - 再次看起来好像对象没有呈现。

等待... php.net说The __toString() method allows a class to decide how it will react when it is treated like a string。那么,可以将某些东西视为字符串吗?

与属性一起工作是正常的,当试图打印整个对象时,问题只是出现。

我应该在哪里看?懒惰加载?有一些懒惰的加载属性,但没有那么多。还是班上缺少的东西?还是有解决方法。

ps:

  • 无法print_r或var_dump查询结果,我得到了一个内存限制错误。
  • 我看到了https://wiki.typo3.org/exception/cms/1234386924,但是initStorageObjects()在构造函数中已经调用

回答问题;

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

将被解析为一个对象,但是任何 whitespace内部都会使其作为字符串解析。

以下方法与<f:debug>相同,在我的情况下类似地工作:

     TYPO3CMSCoreUtilityDebugUtility::debug(
        $var = $variable,
        $header = 'Institutions',
        $group = ''
     );
     TYPO3CMSExtbaseUtilityDebuggerUtility::var_dump(
        $variable,
        $title = 'Institutions', 
        $maxDepth = 8,
        $plainText = FALSE,
        $ansiColors = TRUE,
        $return = FALSE,
        $blacklistedClassNames = NULL,
        $blacklistedPropertyNames = NULL
     );

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

它不比F:Debug不方便(因为您必须在两个不同的位置进行工作,例如,当您在模板中的循环中时,您必须转到控制器并再次构建该循环(,但这是一个有用的解决方法。

编辑:我发现这足以进行

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

在一行上

相关内容

  • 没有找到相关文章

最新更新