fix handling typed properties as constraint options
This commit is contained in:
parent
33c6766117
commit
4a66a6098f
@ -108,7 +108,7 @@ abstract class Constraint
|
|||||||
$defaultOption = $this->getDefaultOption();
|
$defaultOption = $this->getDefaultOption();
|
||||||
$invalidOptions = [];
|
$invalidOptions = [];
|
||||||
$missingOptions = array_flip((array) $this->getRequiredOptions());
|
$missingOptions = array_flip((array) $this->getRequiredOptions());
|
||||||
$knownOptions = get_object_vars($this);
|
$knownOptions = get_class_vars(static::class);
|
||||||
|
|
||||||
// The "groups" option is added to the object lazily
|
// The "groups" option is added to the object lazily
|
||||||
$knownOptions['groups'] = true;
|
$knownOptions['groups'] = true;
|
||||||
|
@ -13,10 +13,13 @@ namespace Symfony\Component\Validator\Tests;
|
|||||||
|
|
||||||
use PHPUnit\Framework\TestCase;
|
use PHPUnit\Framework\TestCase;
|
||||||
use Symfony\Component\Validator\Constraint;
|
use Symfony\Component\Validator\Constraint;
|
||||||
|
use Symfony\Component\Validator\Exception\InvalidOptionsException;
|
||||||
use Symfony\Component\Validator\Tests\Fixtures\ClassConstraint;
|
use Symfony\Component\Validator\Tests\Fixtures\ClassConstraint;
|
||||||
use Symfony\Component\Validator\Tests\Fixtures\ConstraintA;
|
use Symfony\Component\Validator\Tests\Fixtures\ConstraintA;
|
||||||
use Symfony\Component\Validator\Tests\Fixtures\ConstraintB;
|
use Symfony\Component\Validator\Tests\Fixtures\ConstraintB;
|
||||||
use Symfony\Component\Validator\Tests\Fixtures\ConstraintC;
|
use Symfony\Component\Validator\Tests\Fixtures\ConstraintC;
|
||||||
|
use Symfony\Component\Validator\Tests\Fixtures\ConstraintWithStaticProperty;
|
||||||
|
use Symfony\Component\Validator\Tests\Fixtures\ConstraintWithTypedProperty;
|
||||||
use Symfony\Component\Validator\Tests\Fixtures\ConstraintWithValue;
|
use Symfony\Component\Validator\Tests\Fixtures\ConstraintWithValue;
|
||||||
use Symfony\Component\Validator\Tests\Fixtures\ConstraintWithValueAsDefault;
|
use Symfony\Component\Validator\Tests\Fixtures\ConstraintWithValueAsDefault;
|
||||||
|
|
||||||
@ -245,4 +248,25 @@ class ConstraintTest extends TestCase
|
|||||||
$this->expectExceptionMessage('No default option is configured for constraint "Symfony\Component\Validator\Tests\Fixtures\ConstraintB".');
|
$this->expectExceptionMessage('No default option is configured for constraint "Symfony\Component\Validator\Tests\Fixtures\ConstraintB".');
|
||||||
new ConstraintB(['value' => 1]);
|
new ConstraintB(['value' => 1]);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public function testStaticPropertiesAreNoOptions()
|
||||||
|
{
|
||||||
|
$this->expectException(InvalidOptionsException::class);
|
||||||
|
|
||||||
|
new ConstraintWithStaticProperty([
|
||||||
|
'foo' => 'bar',
|
||||||
|
]);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @requires PHP 7.4
|
||||||
|
*/
|
||||||
|
public function testSetTypedProperty()
|
||||||
|
{
|
||||||
|
$constraint = new ConstraintWithTypedProperty([
|
||||||
|
'foo' => 'bar',
|
||||||
|
]);
|
||||||
|
|
||||||
|
$this->assertSame('bar', $constraint->foo);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
@ -0,0 +1,10 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
namespace Symfony\Component\Validator\Tests\Fixtures;
|
||||||
|
|
||||||
|
use Symfony\Component\Validator\Constraint;
|
||||||
|
|
||||||
|
class ConstraintWithStaticProperty extends Constraint
|
||||||
|
{
|
||||||
|
public static $foo;
|
||||||
|
}
|
@ -0,0 +1,10 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
namespace Symfony\Component\Validator\Tests\Fixtures;
|
||||||
|
|
||||||
|
use Symfony\Component\Validator\Constraint;
|
||||||
|
|
||||||
|
class ConstraintWithTypedProperty extends Constraint
|
||||||
|
{
|
||||||
|
public string $foo;
|
||||||
|
}
|
Reference in New Issue
Block a user