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)
|
||||
{
|
||||
if (is_object($value) && method_exists($value, '__toString')) {
|
||||
return (string) $value;
|
||||
}
|
||||
|
||||
if ($value instanceof \DateTime) {
|
||||
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\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>
|
||||
*/
|
||||
|
@ -40,6 +40,7 @@ class EqualToValidatorTest extends AbstractComparisonValidatorTestCase
|
||||
array(3, '3'),
|
||||
array('a', 'a'),
|
||||
array(new \DateTime('2000-01-01'), new \DateTime('2000-01-01')),
|
||||
array(new ComparisonTest_Class(5), new ComparisonTest_Class(5)),
|
||||
array(null, 1),
|
||||
);
|
||||
}
|
||||
@ -52,7 +53,8 @@ class EqualToValidatorTest extends AbstractComparisonValidatorTestCase
|
||||
return array(
|
||||
array(1, 2, '2', 'integer'),
|
||||
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(
|
||||
array(2, 1),
|
||||
array(new \DateTime('2005/01/01'), new \DateTime('2001/01/01')),
|
||||
array(new ComparisonTest_Class(5), new ComparisonTest_Class(4)),
|
||||
array('333', '22'),
|
||||
array(null, 1),
|
||||
);
|
||||
@ -52,6 +53,8 @@ class GreaterThanValidatorTest extends AbstractComparisonValidatorTestCase
|
||||
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('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', '22', "'22'", 'string')
|
||||
);
|
||||
|
@ -36,11 +36,13 @@ class IdenticalToValidatorTest extends AbstractComparisonValidatorTestCase
|
||||
public function provideValidComparisons()
|
||||
{
|
||||
$date = new \DateTime('2000-01-01');
|
||||
$object = new ComparisonTest_Class(2);
|
||||
|
||||
return array(
|
||||
array(3, 3),
|
||||
array('a', 'a'),
|
||||
array($date, $date),
|
||||
array($object, $object),
|
||||
array(null, 1),
|
||||
);
|
||||
}
|
||||
@ -55,7 +57,8 @@ class IdenticalToValidatorTest extends AbstractComparisonValidatorTestCase
|
||||
array(2, '2', "'2'", '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('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(new \DateTime('2000-01-01'), new \DateTime('2000-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', 'z'),
|
||||
array(null, 1),
|
||||
@ -53,6 +55,7 @@ class LessThanOrEqualValidatorTest extends AbstractComparisonValidatorTestCase
|
||||
return array(
|
||||
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 ComparisonTest_Class(5), new ComparisonTest_Class(4), '4', __NAMESPACE__.'\ComparisonTest_Class'),
|
||||
array('c', 'b', "'b'", 'string')
|
||||
);
|
||||
}
|
||||
|
@ -37,6 +37,7 @@ class LessThanValidatorTest extends AbstractComparisonValidatorTestCase
|
||||
return array(
|
||||
array(1, 2),
|
||||
array(new \DateTime('2000-01-01'), new \DateTime('2010-01-01')),
|
||||
array(new ComparisonTest_Class(4), new ComparisonTest_Class(5)),
|
||||
array('22', '333'),
|
||||
array(null, 1),
|
||||
);
|
||||
@ -52,6 +53,8 @@ class LessThanValidatorTest extends AbstractComparisonValidatorTestCase
|
||||
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('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')
|
||||
);
|
||||
}
|
||||
|
@ -39,6 +39,7 @@ class NotEqualToValidatorTest extends AbstractComparisonValidatorTestCase
|
||||
array(1, 2),
|
||||
array('22', '333'),
|
||||
array(new \DateTime('2001-01-01'), new \DateTime('2000-01-01')),
|
||||
array(new ComparisonTest_Class(6), new ComparisonTest_Class(5)),
|
||||
array(null, 1),
|
||||
);
|
||||
}
|
||||
@ -52,7 +53,8 @@ class NotEqualToValidatorTest extends AbstractComparisonValidatorTestCase
|
||||
array(3, 3, '3', 'integer'),
|
||||
array('2', 2, '2', 'integer'),
|
||||
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()
|
||||
{
|
||||
$date = new \DateTime('2000-01-01');
|
||||
$object = new ComparisonTest_Class(2);
|
||||
|
||||
return array(
|
||||
array(3, 3, '3', 'integer'),
|
||||
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