for testing and deploying your application
for finding and fixing issues
for empowering human code reviews
<?php
declare(strict_types=1);
namespace BrenoRoosevelt\Validation\Exception;
use BrenoRoosevelt\Validation\Contracts\Result;
use BrenoRoosevelt\Validation\Contracts\Rule;
trait Guard
{
/**
* @throws ValidationExceptionInterface
*/
protected function guardRule(
Rule $rule,
mixed $input,
array $context = [],
ValidationExceptionFactoryInterface | ValidationExceptionInterface | string | null $validationException = null
): void {
$result = $rule->validate($input, $context);
$this->guardResult($result, $validationException);
}
protected function guardResult(
Result $result,
if ($result->isOk()) {
return;
if ($validationException instanceof ValidationExceptionInterface) {
throw $validationException;
if ($validationException instanceof ValidationExceptionFactoryInterface) {
throw $validationException->create($result);
$exceptionMessage = $validationException;
if (ValidationException::hasFactory()) {
throw ValidationException::getFactory()->create($result, $exceptionMessage);
throw new ValidationException($result->getErrors(), $exceptionMessage);