Completed
Pull Request — 1.x (#12)
by Kevin
01:33
created

HydratingException::getErrorMessage()   A

Complexity

Conditions 4
Paths 4

Size

Total Lines 14

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
dl 0
loc 14
rs 9.7998
c 0
b 0
f 0
cc 4
nc 4
nop 2
1
<?php
2
namespace MetaHydrator\Exception;
3
4
/**
5
 * An exception containing the mapping of various errors in a form data.
6
 *
7
 * Class HydratingException
8
 * @package MetaHydrator\Exception
9
 */
10
class HydratingException extends \Exception
11
{
12
    /** @var array */
13
    private $errorsMap;
14
    /** @return array */
15
    public function getErrorsMap() { return $this->errorsMap; }
16
17
    /**
18
     * HydratingException constructor.
19
     * All the leaves of errors map should describe a specific error.
20
     *
21
     * @param array $errorsMap
22
     * @param string $message
23
     * @param int $code
24
     */
25
    public function __construct($errorsMap, $message = "", $code = 412)
26
    {
27
        $errorMessages = $this->getErrorMessage($errorsMap);
28
        $message .= "Detailed errors : \n " . implode(", ", $errorMessages);
29
        parent::__construct($message, $code, null);
30
        $this->errorsMap = $errorsMap;
31
    }
32
33
    private function getErrorMessage($errorsMap, $parentField = 'root')
34
    {
35
        $errorMessages = [];
36
        foreach ($errorsMap as $field => $error){
37
            $completeField = $parentField . '.' . $field;
38
            if (is_array($error)){
39
                $innerError = $this->getErrorMessage($error, $completeField);
40
                $errorMessages = array_merge($errorMessages, $innerError);
41
            }else if ($error !== null){
42
                $errorMessages[] = $completeField . " : " . $error;
43
            }
44
        }
45
        return $errorMessages;
46
    }
47
}
48