在自定义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>
在一行上