[+TASK] improve exception message in Argument
authorFelix Oertel <f@oer.tel>
Mon, 11 Apr 2011 10:13:30 +0000 (12:13 +0200)
committerFelix Oertel <f@oer.tel>
Mon, 11 Apr 2011 10:13:30 +0000 (12:13 +0200)
When mapping or trying to map objects, the propertyMapper
leaves error messages in the mappingResults for every mapping
that failed.

If the Argument fails to map one object required by the
controllerAction, it throws an exception but it does not
include the mapping errors. Thus it is hard to find the reason(s)
an object could not be mapped.

* add mapping errors to exception

Change-Id: Icfca5eab5c9b243900ab5f34efd002a938a6a39a

typo3/sysext/extbase/Classes/MVC/Controller/Argument.php

index a91e8aa..7bfc072 100644 (file)
@@ -385,8 +385,15 @@ class Tx_Extbase_MVC_Controller_Argument {
                        $transformedValue = $this->propertyMapper->map(array_keys($value), $value, $this->dataType);
                }
 
-               if (!($transformedValue instanceof $this->dataType) && !($transformedValue === NULL && !$this->isRequired())) {
-                       throw new Tx_Extbase_MVC_Exception_InvalidArgumentValue('The value must be of type "' . $this->dataType . '", but was of type "' . (is_object($transformedValue) ? get_class($transformedValue) : gettype($transformedValue)) . '".', 1251730701);
+               if (!($transformedValue instanceof $this->dataType) && ($transformedValue !== NULL || $this->isRequired())) {
+                       throw new Tx_Extbase_MVC_Exception_InvalidArgumentValue(
+                               'The value must be of type "' . $this->dataType . '", but was of type "'
+                                       . (is_object($transformedValue) ? get_class($transformedValue) : gettype($transformedValue)) . '".'
+                                               // add mappingResult errors to exception
+                                       . ($this->propertyMapper->getMappingResults()->hasErrors()
+                                               ? '<p>' . implode('<br />', $this->propertyMapper->getMappingResults()->getErrors()) . '</p>'
+                                               : ''),
+                               1251730701);
                }
                return $transformedValue;
        }