如果 <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
- 有时在流体调试器中出现字符串 'Array'(现在无法重现)
- 当代码在 3 行时:
#1273753083: Cannot cast object of type "TYPO3\CMS\Extbase\Persistence\Generic\QueryResult" to string.
- 或者
#1273753083: Cannot cast object of type "TYPO3\CMS\Extbase\Persistence\Generic\LazyObjectStorage" to string.
- 当代码在 1 行时:
#1234386924: Cannot create empty instance of the class "TYPO3\CMS\Extbase\Persistence\ObjectStorage" because it does not implement the TYPO3\CMS\Extbase\DomainObject\DomainObjectInterface.
如果我用 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:
- 无法print_r或var_dump查询结果,内存限制错误。
- 我看到了 https://wiki.typo3.org/Exception/CMS/1234386924 但
initStorageObjects()
已经在构造函数中调用了
以下方法与 <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>
将被解析为一个对象,但是 任何 里面的空格都会让它被解析为一个字符串。
在自定义 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
- 有时在流体调试器中出现字符串 'Array'(现在无法重现)
- 当代码在 3 行时:
#1273753083: Cannot cast object of type "TYPO3\CMS\Extbase\Persistence\Generic\QueryResult" to string.
- 或者
#1273753083: Cannot cast object of type "TYPO3\CMS\Extbase\Persistence\Generic\LazyObjectStorage" to string.
- 当代码在 1 行时:
#1234386924: Cannot create empty instance of the class "TYPO3\CMS\Extbase\Persistence\ObjectStorage" because it does not implement the TYPO3\CMS\Extbase\DomainObject\DomainObjectInterface.
如果我用 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:
- 无法print_r或var_dump查询结果,内存限制错误。
- 我看到了 https://wiki.typo3.org/Exception/CMS/1234386924 但
initStorageObjects()
已经在构造函数中调用了
以下方法与 <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>
将被解析为一个对象,但是 任何 里面的空格都会让它被解析为一个字符串。