Actions
Bug #62553
closedException when accessing empty ObjectStorage property via numeric index
Status:
Closed
Priority:
Must have
Assignee:
Category:
Extbase
Target version:
Start date:
2014-10-30
Due date:
% Done:
100%
Estimated time:
TYPO3 Version:
6.2
PHP Version:
5.3
Tags:
Complexity:
Is Regression:
No
Sprint Focus:
Description
Imagine a snippet like this within a Fluid template:
{product.images.0.title}
Given the images
property is an ObjectStorage
and empty, a warning exception is thrown:
#1: PHP Warning: spl_object_hash() expects parameter 1 to be object, string given in /var/www/typo3_src/typo3/sysext/extbase/Classes/Persistence/ObjectStorage.php line 160
This is caused by the following steps:
- Fluid parser calls
\TYPO3\CMS\Fluid\Core\Parser\SyntaxTree\ObjectAccessorNode::getPropertyPath
- The property "0" is not found via
\TYPO3\CMS\Extbase\Reflection\ObjectAccess::getPropertyInternal
- The array check yields
TRUE
(ObjectStorage
implements the\ArrayAccess
interface) isset($subject[$pathSegment])
is calledObjectStorage::offsetExists
is called with"0"
as argument- The call to
spl_object_hash("0")
causes the warning
I am not sure who is at fault here but I can say the following:
- Accessing a non-existing property in Fluid should never trigger an error
- Implementing the
\ArrayAccess
interface means a promise to be capable of handling the only two natively supported index typesstring
andinteger
Attached is a patch which performs a simple check via is_object
.
Files
Actions