merged branch bes89/validator_object_to_string (PR #9036)
This PR was submitted for the 2.3 branch but it was merged into the master branch instead (closes #9036). Discussion ---------- [Validator] convert object to string if possible instead of using var_export directly | Q | A | ------------- | --- | Bug fix? | no | New feature? | no | BC breaks? | no | Deprecations? | no | Tests pass? | yes | Fixed tickets | - | License | MIT | Doc PR | - Commits ------- 2149146 [Validator] convert object to string if possible instead of using var_export directly
This commit is contained in:
commit
d3ca145342
@ -60,6 +60,10 @@ abstract class AbstractComparisonValidator extends ConstraintValidator
|
|||||||
*/
|
*/
|
||||||
private function valueToString($value)
|
private function valueToString($value)
|
||||||
{
|
{
|
||||||
|
if (is_object($value) && method_exists($value, '__toString')) {
|
||||||
|
return (string) $value;
|
||||||
|
}
|
||||||
|
|
||||||
if ($value instanceof \DateTime) {
|
if ($value instanceof \DateTime) {
|
||||||
return $value->format('Y-m-d H:i:s');
|
return $value->format('Y-m-d H:i:s');
|
||||||
}
|
}
|
||||||
|
@ -14,6 +14,21 @@ namespace Symfony\Component\Validator\Tests\Constraints;
|
|||||||
use Symfony\Component\Validator\Constraint;
|
use Symfony\Component\Validator\Constraint;
|
||||||
use Symfony\Component\Validator\Constraints\AbstractComparisonValidator;
|
use Symfony\Component\Validator\Constraints\AbstractComparisonValidator;
|
||||||
|
|
||||||
|
class ComparisonTest_Class
|
||||||
|
{
|
||||||
|
protected $value;
|
||||||
|
|
||||||
|
public function __construct($value)
|
||||||
|
{
|
||||||
|
$this->value = $value;
|
||||||
|
}
|
||||||
|
|
||||||
|
public function __toString()
|
||||||
|
{
|
||||||
|
return (string) $this->value;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @author Daniel Holmes <daniel@danielholmes.org>
|
* @author Daniel Holmes <daniel@danielholmes.org>
|
||||||
*/
|
*/
|
||||||
|
@ -40,6 +40,7 @@ class EqualToValidatorTest extends AbstractComparisonValidatorTestCase
|
|||||||
array(3, '3'),
|
array(3, '3'),
|
||||||
array('a', 'a'),
|
array('a', 'a'),
|
||||||
array(new \DateTime('2000-01-01'), new \DateTime('2000-01-01')),
|
array(new \DateTime('2000-01-01'), new \DateTime('2000-01-01')),
|
||||||
|
array(new ComparisonTest_Class(5), new ComparisonTest_Class(5)),
|
||||||
array(null, 1),
|
array(null, 1),
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
@ -52,7 +53,8 @@ class EqualToValidatorTest extends AbstractComparisonValidatorTestCase
|
|||||||
return array(
|
return array(
|
||||||
array(1, 2, '2', 'integer'),
|
array(1, 2, '2', 'integer'),
|
||||||
array('22', '333', "'333'", 'string'),
|
array('22', '333', "'333'", 'string'),
|
||||||
array(new \DateTime('2001-01-01'), new \DateTime('2000-01-01'), '2000-01-01 00:00:00', 'DateTime')
|
array(new \DateTime('2001-01-01'), new \DateTime('2000-01-01'), '2000-01-01 00:00:00', 'DateTime'),
|
||||||
|
array(new ComparisonTest_Class(4), new ComparisonTest_Class(5), '5', __NAMESPACE__.'\ComparisonTest_Class'),
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -37,6 +37,7 @@ class GreaterThanValidatorTest extends AbstractComparisonValidatorTestCase
|
|||||||
return array(
|
return array(
|
||||||
array(2, 1),
|
array(2, 1),
|
||||||
array(new \DateTime('2005/01/01'), new \DateTime('2001/01/01')),
|
array(new \DateTime('2005/01/01'), new \DateTime('2001/01/01')),
|
||||||
|
array(new ComparisonTest_Class(5), new ComparisonTest_Class(4)),
|
||||||
array('333', '22'),
|
array('333', '22'),
|
||||||
array(null, 1),
|
array(null, 1),
|
||||||
);
|
);
|
||||||
@ -52,6 +53,8 @@ class GreaterThanValidatorTest extends AbstractComparisonValidatorTestCase
|
|||||||
array(2, 2, '2', 'integer'),
|
array(2, 2, '2', 'integer'),
|
||||||
array(new \DateTime('2000/01/01'), new \DateTime('2005/01/01'), '2005-01-01 00:00:00', 'DateTime'),
|
array(new \DateTime('2000/01/01'), new \DateTime('2005/01/01'), '2005-01-01 00:00:00', 'DateTime'),
|
||||||
array(new \DateTime('2000/01/01'), new \DateTime('2000/01/01'), '2000-01-01 00:00:00', 'DateTime'),
|
array(new \DateTime('2000/01/01'), new \DateTime('2000/01/01'), '2000-01-01 00:00:00', 'DateTime'),
|
||||||
|
array(new ComparisonTest_Class(4), new ComparisonTest_Class(5), '5', __NAMESPACE__.'\ComparisonTest_Class'),
|
||||||
|
array(new ComparisonTest_Class(5), new ComparisonTest_Class(5), '5', __NAMESPACE__.'\ComparisonTest_Class'),
|
||||||
array('22', '333', "'333'", 'string'),
|
array('22', '333', "'333'", 'string'),
|
||||||
array('22', '22', "'22'", 'string')
|
array('22', '22', "'22'", 'string')
|
||||||
);
|
);
|
||||||
|
@ -36,11 +36,13 @@ class IdenticalToValidatorTest extends AbstractComparisonValidatorTestCase
|
|||||||
public function provideValidComparisons()
|
public function provideValidComparisons()
|
||||||
{
|
{
|
||||||
$date = new \DateTime('2000-01-01');
|
$date = new \DateTime('2000-01-01');
|
||||||
|
$object = new ComparisonTest_Class(2);
|
||||||
|
|
||||||
return array(
|
return array(
|
||||||
array(3, 3),
|
array(3, 3),
|
||||||
array('a', 'a'),
|
array('a', 'a'),
|
||||||
array($date, $date),
|
array($date, $date),
|
||||||
|
array($object, $object),
|
||||||
array(null, 1),
|
array(null, 1),
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
@ -55,7 +57,8 @@ class IdenticalToValidatorTest extends AbstractComparisonValidatorTestCase
|
|||||||
array(2, '2', "'2'", 'string'),
|
array(2, '2', "'2'", 'string'),
|
||||||
array('22', '333', "'333'", 'string'),
|
array('22', '333', "'333'", 'string'),
|
||||||
array(new \DateTime('2001-01-01'), new \DateTime('2001-01-01'), '2001-01-01 00:00:00', 'DateTime'),
|
array(new \DateTime('2001-01-01'), new \DateTime('2001-01-01'), '2001-01-01 00:00:00', 'DateTime'),
|
||||||
array(new \DateTime('2001-01-01'), new \DateTime('1999-01-01'), '1999-01-01 00:00:00', 'DateTime')
|
array(new \DateTime('2001-01-01'), new \DateTime('1999-01-01'), '1999-01-01 00:00:00', 'DateTime'),
|
||||||
|
array(new ComparisonTest_Class(4), new ComparisonTest_Class(5), '5', __NAMESPACE__.'\ComparisonTest_Class'),
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -39,6 +39,8 @@ class LessThanOrEqualValidatorTest extends AbstractComparisonValidatorTestCase
|
|||||||
array(1, 1),
|
array(1, 1),
|
||||||
array(new \DateTime('2000-01-01'), new \DateTime('2000-01-01')),
|
array(new \DateTime('2000-01-01'), new \DateTime('2000-01-01')),
|
||||||
array(new \DateTime('2000-01-01'), new \DateTime('2020-01-01')),
|
array(new \DateTime('2000-01-01'), new \DateTime('2020-01-01')),
|
||||||
|
array(new ComparisonTest_Class(4), new ComparisonTest_Class(5)),
|
||||||
|
array(new ComparisonTest_Class(5), new ComparisonTest_Class(5)),
|
||||||
array('a', 'a'),
|
array('a', 'a'),
|
||||||
array('a', 'z'),
|
array('a', 'z'),
|
||||||
array(null, 1),
|
array(null, 1),
|
||||||
@ -53,6 +55,7 @@ class LessThanOrEqualValidatorTest extends AbstractComparisonValidatorTestCase
|
|||||||
return array(
|
return array(
|
||||||
array(2, 1, '1', 'integer'),
|
array(2, 1, '1', 'integer'),
|
||||||
array(new \DateTime('2010-01-01'), new \DateTime('2000-01-01'), '2000-01-01 00:00:00', 'DateTime'),
|
array(new \DateTime('2010-01-01'), new \DateTime('2000-01-01'), '2000-01-01 00:00:00', 'DateTime'),
|
||||||
|
array(new ComparisonTest_Class(5), new ComparisonTest_Class(4), '4', __NAMESPACE__.'\ComparisonTest_Class'),
|
||||||
array('c', 'b', "'b'", 'string')
|
array('c', 'b', "'b'", 'string')
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
@ -37,6 +37,7 @@ class LessThanValidatorTest extends AbstractComparisonValidatorTestCase
|
|||||||
return array(
|
return array(
|
||||||
array(1, 2),
|
array(1, 2),
|
||||||
array(new \DateTime('2000-01-01'), new \DateTime('2010-01-01')),
|
array(new \DateTime('2000-01-01'), new \DateTime('2010-01-01')),
|
||||||
|
array(new ComparisonTest_Class(4), new ComparisonTest_Class(5)),
|
||||||
array('22', '333'),
|
array('22', '333'),
|
||||||
array(null, 1),
|
array(null, 1),
|
||||||
);
|
);
|
||||||
@ -52,6 +53,8 @@ class LessThanValidatorTest extends AbstractComparisonValidatorTestCase
|
|||||||
array(2, 2, '2', 'integer'),
|
array(2, 2, '2', 'integer'),
|
||||||
array(new \DateTime('2010-01-01'), new \DateTime('2000-01-01'), '2000-01-01 00:00:00', 'DateTime'),
|
array(new \DateTime('2010-01-01'), new \DateTime('2000-01-01'), '2000-01-01 00:00:00', 'DateTime'),
|
||||||
array(new \DateTime('2000-01-01'), new \DateTime('2000-01-01'), '2000-01-01 00:00:00', 'DateTime'),
|
array(new \DateTime('2000-01-01'), new \DateTime('2000-01-01'), '2000-01-01 00:00:00', 'DateTime'),
|
||||||
|
array(new ComparisonTest_Class(5), new ComparisonTest_Class(5), '5', __NAMESPACE__.'\ComparisonTest_Class'),
|
||||||
|
array(new ComparisonTest_Class(6), new ComparisonTest_Class(5), '5', __NAMESPACE__.'\ComparisonTest_Class'),
|
||||||
array('333', '22', "'22'", 'string')
|
array('333', '22', "'22'", 'string')
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
@ -39,6 +39,7 @@ class NotEqualToValidatorTest extends AbstractComparisonValidatorTestCase
|
|||||||
array(1, 2),
|
array(1, 2),
|
||||||
array('22', '333'),
|
array('22', '333'),
|
||||||
array(new \DateTime('2001-01-01'), new \DateTime('2000-01-01')),
|
array(new \DateTime('2001-01-01'), new \DateTime('2000-01-01')),
|
||||||
|
array(new ComparisonTest_Class(6), new ComparisonTest_Class(5)),
|
||||||
array(null, 1),
|
array(null, 1),
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
@ -52,7 +53,8 @@ class NotEqualToValidatorTest extends AbstractComparisonValidatorTestCase
|
|||||||
array(3, 3, '3', 'integer'),
|
array(3, 3, '3', 'integer'),
|
||||||
array('2', 2, '2', 'integer'),
|
array('2', 2, '2', 'integer'),
|
||||||
array('a', 'a', "'a'", 'string'),
|
array('a', 'a', "'a'", 'string'),
|
||||||
array(new \DateTime('2000-01-01'), new \DateTime('2000-01-01'), '2000-01-01 00:00:00', 'DateTime')
|
array(new \DateTime('2000-01-01'), new \DateTime('2000-01-01'), '2000-01-01 00:00:00', 'DateTime'),
|
||||||
|
array(new ComparisonTest_Class(5), new ComparisonTest_Class(5), '5', __NAMESPACE__.'\ComparisonTest_Class'),
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -51,11 +51,13 @@ class NotIdenticalToValidatorTest extends AbstractComparisonValidatorTestCase
|
|||||||
public function provideInvalidComparisons()
|
public function provideInvalidComparisons()
|
||||||
{
|
{
|
||||||
$date = new \DateTime('2000-01-01');
|
$date = new \DateTime('2000-01-01');
|
||||||
|
$object = new ComparisonTest_Class(2);
|
||||||
|
|
||||||
return array(
|
return array(
|
||||||
array(3, 3, '3', 'integer'),
|
array(3, 3, '3', 'integer'),
|
||||||
array('a', 'a', "'a'", 'string'),
|
array('a', 'a', "'a'", 'string'),
|
||||||
array($date, $date, '2000-01-01 00:00:00', 'DateTime')
|
array($date, $date, '2000-01-01 00:00:00', 'DateTime'),
|
||||||
|
array($object, $object, '2', __NAMESPACE__.'\ComparisonTest_Class'),
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
Reference in New Issue
Block a user