Skip to content

BUG: Result::getFirstError can return false even if Result::hasErrors is true #3370

Open
@mhsdesign

Description

State of the result in question

Flow Variable Dump
Neos\Error\Messages\Result object
 errors => array(empty)
 errorsExist => true
 warnings => array(empty)
 warningsExist => false
 notices => array(empty)
 noticesExist => false
 propertyResults => array(1)
   integer 0 => Neos\Error\Messages\Result object
     errors => array(1)
       integer 0 => Neos\Flow\Property\TypeConverter\Error\TargetNotFoundError prototype object proxy
     errorsExist => true
     warnings => array(empty)
     warningsExist => false
     notices => array(empty)
     noticesExist => false
     propertyResults => array(empty)
     parent => Neos\Error\Messages\Result object
 parent => NULL

The following code breaks with this exception, and after debugging it turns out getFirstError really returns false.

Error: Call to a member function getMessage() on bool

$propertyValue = $this->propertyMapper->convert(...);
$messages = $this->propertyMapper->getMessages();
if ($messages->hasErrors()) {
    throw new \RuntimeException($messages->getFirstError()->getMessage(), 1718976491);
}

This seems to be a workaround to really get the first error:

$flattenedErrors = $messages->getFlattenedErrors();
$firstError = current(current($flattenedErrors));

I think this is because we set errorsExist on the parent but the error i inside the propertyResults sub result.
Maybe this is how it is and im using it wrongly.

Tested on

Flow 7.3
Flow 8.3

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions