[Validator] add Validation::createCallable()
This commit is contained in:
parent
1cfadb41dc
commit
2e4f2ac322
@ -0,0 +1,40 @@
|
||||
<?php
|
||||
|
||||
/*
|
||||
* This file is part of the Symfony package.
|
||||
*
|
||||
* (c) Fabien Potencier <fabien@symfony.com>
|
||||
*
|
||||
* For the full copyright and license information, please view the LICENSE
|
||||
* file that was distributed with this source code.
|
||||
*/
|
||||
|
||||
namespace Symfony\Component\Validator\Exception;
|
||||
|
||||
use Symfony\Component\Validator\ConstraintViolationListInterface;
|
||||
|
||||
/**
|
||||
* @author Jan Vernieuwe <jan.vernieuwe@phpro.be>
|
||||
*/
|
||||
class ValidationFailedException extends RuntimeException
|
||||
{
|
||||
private $violations;
|
||||
private $value;
|
||||
|
||||
public function __construct($value, ConstraintViolationListInterface $violations)
|
||||
{
|
||||
$this->violations = $violations;
|
||||
$this->value = $value;
|
||||
parent::__construct($violations);
|
||||
}
|
||||
|
||||
public function getValue()
|
||||
{
|
||||
return $this->value;
|
||||
}
|
||||
|
||||
public function getViolations(): ConstraintViolationListInterface
|
||||
{
|
||||
return $this->violations;
|
||||
}
|
||||
}
|
36
src/Symfony/Component/Validator/Tests/ValidationTest.php
Normal file
36
src/Symfony/Component/Validator/Tests/ValidationTest.php
Normal file
@ -0,0 +1,36 @@
|
||||
<?php
|
||||
|
||||
/*
|
||||
* This file is part of the Symfony package.
|
||||
*
|
||||
* (c) Fabien Potencier <fabien@symfony.com>
|
||||
*
|
||||
* For the full copyright and license information, please view the LICENSE
|
||||
* file that was distributed with this source code.
|
||||
*/
|
||||
|
||||
namespace Symfony\Component\Validator\Tests\Validator;
|
||||
|
||||
use PHPUnit\Framework\TestCase;
|
||||
use Symfony\Component\Validator\Constraints\Email;
|
||||
use Symfony\Component\Validator\Exception\ValidationFailedException;
|
||||
use Symfony\Component\Validator\Validation;
|
||||
|
||||
/**
|
||||
* @author Jan Vernieuwe <jan.vernieuwe@phpro.be>
|
||||
*/
|
||||
class ValidationTest extends TestCase
|
||||
{
|
||||
public function testCreateCallableValid()
|
||||
{
|
||||
$validator = Validation::createCallable(new Email());
|
||||
$this->assertEquals('test@example.com', $validator('test@example.com'));
|
||||
}
|
||||
|
||||
public function testCreateCallableInvalid()
|
||||
{
|
||||
$validator = Validation::createCallable(new Email());
|
||||
$this->expectException(ValidationFailedException::class);
|
||||
$validator('test');
|
||||
}
|
||||
}
|
@ -11,6 +11,7 @@
|
||||
|
||||
namespace Symfony\Component\Validator;
|
||||
|
||||
use Symfony\Component\Validator\Exception\ValidationFailedException;
|
||||
use Symfony\Component\Validator\Validator\ValidatorInterface;
|
||||
|
||||
/**
|
||||
@ -20,6 +21,23 @@ use Symfony\Component\Validator\Validator\ValidatorInterface;
|
||||
*/
|
||||
final class Validation
|
||||
{
|
||||
/**
|
||||
* Creates a callable chain of constraints.
|
||||
*/
|
||||
public static function createCallable(Constraint ...$constraints): callable
|
||||
{
|
||||
$validator = self::createValidator();
|
||||
|
||||
return static function ($value) use ($constraints, $validator) {
|
||||
$violations = $validator->validate($value, $constraints);
|
||||
if (0 !== $violations->count()) {
|
||||
throw new ValidationFailedException($value, $violations);
|
||||
}
|
||||
|
||||
return $value;
|
||||
};
|
||||
}
|
||||
|
||||
/**
|
||||
* Creates a new validator.
|
||||
*
|
||||
|
Reference in New Issue
Block a user