[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;
|
namespace Symfony\Component\Validator;
|
||||||
|
|
||||||
|
use Symfony\Component\Validator\Exception\ValidationFailedException;
|
||||||
use Symfony\Component\Validator\Validator\ValidatorInterface;
|
use Symfony\Component\Validator\Validator\ValidatorInterface;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -20,6 +21,23 @@ use Symfony\Component\Validator\Validator\ValidatorInterface;
|
|||||||
*/
|
*/
|
||||||
final class Validation
|
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.
|
* Creates a new validator.
|
||||||
*
|
*
|
||||||
|
Reference in New Issue
Block a user