Skip to content
Snippets Groups Projects
Commit ae4f7623 authored by Bertrand Gauthier's avatar Bertrand Gauthier
Browse files

Validation OpenApi : afichage des données en erreur, le cas échéant

parent d927ccc4
No related branches found
No related tags found
No related merge requests found
Pipeline #37801 passed
......@@ -7,6 +7,7 @@ use Laminas\Psr7Bridge\Psr7ServerRequest;
use Laminas\Validator\AbstractValidator;
use League\OpenAPIValidation\PSR7\Exception\ValidationFailed;
use League\OpenAPIValidation\PSR7\ServerRequestValidator;
use League\OpenAPIValidation\Schema\Exception\SchemaMismatch;
use Webmozart\Assert\Assert;
class OpenApiValidator extends AbstractValidator
......@@ -14,6 +15,7 @@ class OpenApiValidator extends AbstractValidator
public const INVALID_VALUE = 'invalidValue';
private ServerRequestValidator $serverRequestValidator;
protected bool $generateShortExplanation = true;
protected string $explain;
/** @var array<self::ERROR_*, non-empty-string> */
......@@ -54,11 +56,23 @@ class OpenApiValidator extends AbstractValidator
private function generateMessageFromException(ValidationFailed $e): string
{
$message = $e->getMessage();
while ($e = $e->getPrevious()) {
$message .= PHP_EOL . $e->getMessage();
// NB : Actuellement, Pégase tronque les messages d'erreurs éventuels à 2000 caractères,
// donc on essaie de réduire la taille du message utile ! :-/
// on zappe l'exception englobante
if ($e->getPrevious() !== null) {
$e = $e->getPrevious();
}
$parts = [];
do {
$parts[] = $e->getMessage();
if ($e instanceof SchemaMismatch) {
$parts[] = '/' . implode('/', $e->dataBreadCrumb()->buildChain());
//$parts[] = 'Data : ' . \Respect\Stringifier\stringify($e->data()); // potentiellement trop long
}
} while ($e = $e->getPrevious());
return $message;
return implode(' ', $parts);
}
}
\ No newline at end of file
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment