invalidElements = $invalidElements; parent::__construct($message, $code, $previous); } public static function fromInputFilter(InputFilterInterface $inputFilter, ?Throwable $prev = null): self { return static::fromArray($inputFilter->getMessages(), $prev); } private static function fromArray(array $invalidData, ?Throwable $prev = null): self { return new self( sprintf( 'Provided data is not valid. These are the messages:%s%s%s', PHP_EOL, self::formMessagesToString($invalidData), PHP_EOL ), $invalidData, -1, $prev ); } private static function formMessagesToString(array $messages = []): string { return reduce_left($messages, function ($messageSet, $name, $_, string $acc) { return $acc . sprintf( "\n '%s' => %s", $name, is_array($messageSet) ? print_r($messageSet, true) : $messageSet ); }, ''); } public function getInvalidElements(): array { return $this->invalidElements; } }