[Validator] Use comparison constraints as attributes.
This commit is contained in:
parent
48adfb2e4b
commit
b5bdf8288f
@ -105,6 +105,8 @@ Validator
|
|||||||
*/
|
*/
|
||||||
```
|
```
|
||||||
|
|
||||||
|
* Deprecated the `NumberConstraintTrait` trait.
|
||||||
|
|
||||||
Security
|
Security
|
||||||
--------
|
--------
|
||||||
|
|
||||||
|
@ -184,6 +184,8 @@ Validator
|
|||||||
*/
|
*/
|
||||||
```
|
```
|
||||||
|
|
||||||
|
* Removed the `NumberConstraintTrait` trait.
|
||||||
|
|
||||||
Yaml
|
Yaml
|
||||||
----
|
----
|
||||||
|
|
||||||
|
@ -33,6 +33,7 @@ CHANGELOG
|
|||||||
* added the `ULID` constraint and validator
|
* added the `ULID` constraint and validator
|
||||||
* added support for UUIDv6 in `Uuid` constraint
|
* added support for UUIDv6 in `Uuid` constraint
|
||||||
* enabled the validator to load constraints from PHP attributes
|
* enabled the validator to load constraints from PHP attributes
|
||||||
|
* deprecated the `NumberConstraintTrait` trait
|
||||||
|
|
||||||
5.1.0
|
5.1.0
|
||||||
-----
|
-----
|
||||||
|
@ -30,30 +30,35 @@ abstract class AbstractComparison extends Constraint
|
|||||||
|
|
||||||
/**
|
/**
|
||||||
* {@inheritdoc}
|
* {@inheritdoc}
|
||||||
|
*
|
||||||
|
* @param mixed $value the value to compare or a set of options
|
||||||
*/
|
*/
|
||||||
public function __construct($options = null)
|
public function __construct($value = null, $propertyPath = null, string $message = null, array $groups = null, $payload = null, array $options = [])
|
||||||
{
|
{
|
||||||
if (null === $options) {
|
if (\is_array($value)) {
|
||||||
$options = [];
|
$options = array_merge($value, $options);
|
||||||
|
} elseif (null !== $value) {
|
||||||
|
$options['value'] = $value;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (\is_array($options)) {
|
parent::__construct($options, $groups, $payload);
|
||||||
if (!isset($options['value']) && !isset($options['propertyPath'])) {
|
|
||||||
|
$this->message = $message ?? $this->message;
|
||||||
|
$this->propertyPath = $propertyPath ?? $this->propertyPath;
|
||||||
|
|
||||||
|
if (null === $this->value && null === $this->propertyPath) {
|
||||||
throw new ConstraintDefinitionException(sprintf('The "%s" constraint requires either the "value" or "propertyPath" option to be set.', static::class));
|
throw new ConstraintDefinitionException(sprintf('The "%s" constraint requires either the "value" or "propertyPath" option to be set.', static::class));
|
||||||
}
|
}
|
||||||
|
|
||||||
if (isset($options['value']) && isset($options['propertyPath'])) {
|
if (null !== $this->value && null !== $this->propertyPath) {
|
||||||
throw new ConstraintDefinitionException(sprintf('The "%s" constraint requires only one of the "value" or "propertyPath" options to be set, not both.', static::class));
|
throw new ConstraintDefinitionException(sprintf('The "%s" constraint requires only one of the "value" or "propertyPath" options to be set, not both.', static::class));
|
||||||
}
|
}
|
||||||
|
|
||||||
if (isset($options['propertyPath']) && !class_exists(PropertyAccess::class)) {
|
if (null !== $this->propertyPath && !class_exists(PropertyAccess::class)) {
|
||||||
throw new LogicException(sprintf('The "%s" constraint requires the Symfony PropertyAccess component to use the "propertyPath" option.', static::class));
|
throw new LogicException(sprintf('The "%s" constraint requires the Symfony PropertyAccess component to use the "propertyPath" option.', static::class));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
parent::__construct($options);
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* {@inheritdoc}
|
* {@inheritdoc}
|
||||||
*/
|
*/
|
||||||
|
@ -17,6 +17,7 @@ namespace Symfony\Component\Validator\Constraints;
|
|||||||
*
|
*
|
||||||
* @author Colin O'Dell <colinodell@gmail.com>
|
* @author Colin O'Dell <colinodell@gmail.com>
|
||||||
*/
|
*/
|
||||||
|
#[\Attribute(\Attribute::TARGET_PROPERTY | \Attribute::TARGET_METHOD | \Attribute::IS_REPEATABLE)]
|
||||||
class DivisibleBy extends AbstractComparison
|
class DivisibleBy extends AbstractComparison
|
||||||
{
|
{
|
||||||
const NOT_DIVISIBLE_BY = '6d99d6c3-1464-4ccf-bdc7-14d083cf455c';
|
const NOT_DIVISIBLE_BY = '6d99d6c3-1464-4ccf-bdc7-14d083cf455c';
|
||||||
|
@ -18,6 +18,7 @@ namespace Symfony\Component\Validator\Constraints;
|
|||||||
* @author Daniel Holmes <daniel@danielholmes.org>
|
* @author Daniel Holmes <daniel@danielholmes.org>
|
||||||
* @author Bernhard Schussek <bschussek@gmail.com>
|
* @author Bernhard Schussek <bschussek@gmail.com>
|
||||||
*/
|
*/
|
||||||
|
#[\Attribute(\Attribute::TARGET_PROPERTY | \Attribute::TARGET_METHOD | \Attribute::IS_REPEATABLE)]
|
||||||
class EqualTo extends AbstractComparison
|
class EqualTo extends AbstractComparison
|
||||||
{
|
{
|
||||||
const NOT_EQUAL_ERROR = '478618a7-95ba-473d-9101-cabd45e49115';
|
const NOT_EQUAL_ERROR = '478618a7-95ba-473d-9101-cabd45e49115';
|
||||||
|
@ -18,6 +18,7 @@ namespace Symfony\Component\Validator\Constraints;
|
|||||||
* @author Daniel Holmes <daniel@danielholmes.org>
|
* @author Daniel Holmes <daniel@danielholmes.org>
|
||||||
* @author Bernhard Schussek <bschussek@gmail.com>
|
* @author Bernhard Schussek <bschussek@gmail.com>
|
||||||
*/
|
*/
|
||||||
|
#[\Attribute(\Attribute::TARGET_PROPERTY | \Attribute::TARGET_METHOD | \Attribute::IS_REPEATABLE)]
|
||||||
class GreaterThan extends AbstractComparison
|
class GreaterThan extends AbstractComparison
|
||||||
{
|
{
|
||||||
const TOO_LOW_ERROR = '778b7ae0-84d3-481a-9dec-35fdb64b1d78';
|
const TOO_LOW_ERROR = '778b7ae0-84d3-481a-9dec-35fdb64b1d78';
|
||||||
|
@ -18,6 +18,7 @@ namespace Symfony\Component\Validator\Constraints;
|
|||||||
* @author Daniel Holmes <daniel@danielholmes.org>
|
* @author Daniel Holmes <daniel@danielholmes.org>
|
||||||
* @author Bernhard Schussek <bschussek@gmail.com>
|
* @author Bernhard Schussek <bschussek@gmail.com>
|
||||||
*/
|
*/
|
||||||
|
#[\Attribute(\Attribute::TARGET_PROPERTY | \Attribute::TARGET_METHOD | \Attribute::IS_REPEATABLE)]
|
||||||
class GreaterThanOrEqual extends AbstractComparison
|
class GreaterThanOrEqual extends AbstractComparison
|
||||||
{
|
{
|
||||||
const TOO_LOW_ERROR = 'ea4e51d1-3342-48bd-87f1-9e672cd90cad';
|
const TOO_LOW_ERROR = 'ea4e51d1-3342-48bd-87f1-9e672cd90cad';
|
||||||
|
@ -18,6 +18,7 @@ namespace Symfony\Component\Validator\Constraints;
|
|||||||
* @author Daniel Holmes <daniel@danielholmes.org>
|
* @author Daniel Holmes <daniel@danielholmes.org>
|
||||||
* @author Bernhard Schussek <bschussek@gmail.com>
|
* @author Bernhard Schussek <bschussek@gmail.com>
|
||||||
*/
|
*/
|
||||||
|
#[\Attribute(\Attribute::TARGET_PROPERTY | \Attribute::TARGET_METHOD | \Attribute::IS_REPEATABLE)]
|
||||||
class IdenticalTo extends AbstractComparison
|
class IdenticalTo extends AbstractComparison
|
||||||
{
|
{
|
||||||
const NOT_IDENTICAL_ERROR = '2a8cc50f-58a2-4536-875e-060a2ce69ed5';
|
const NOT_IDENTICAL_ERROR = '2a8cc50f-58a2-4536-875e-060a2ce69ed5';
|
||||||
|
@ -18,6 +18,7 @@ namespace Symfony\Component\Validator\Constraints;
|
|||||||
* @author Daniel Holmes <daniel@danielholmes.org>
|
* @author Daniel Holmes <daniel@danielholmes.org>
|
||||||
* @author Bernhard Schussek <bschussek@gmail.com>
|
* @author Bernhard Schussek <bschussek@gmail.com>
|
||||||
*/
|
*/
|
||||||
|
#[\Attribute(\Attribute::TARGET_PROPERTY | \Attribute::TARGET_METHOD | \Attribute::IS_REPEATABLE)]
|
||||||
class LessThan extends AbstractComparison
|
class LessThan extends AbstractComparison
|
||||||
{
|
{
|
||||||
const TOO_HIGH_ERROR = '079d7420-2d13-460c-8756-de810eeb37d2';
|
const TOO_HIGH_ERROR = '079d7420-2d13-460c-8756-de810eeb37d2';
|
||||||
|
@ -18,6 +18,7 @@ namespace Symfony\Component\Validator\Constraints;
|
|||||||
* @author Daniel Holmes <daniel@danielholmes.org>
|
* @author Daniel Holmes <daniel@danielholmes.org>
|
||||||
* @author Bernhard Schussek <bschussek@gmail.com>
|
* @author Bernhard Schussek <bschussek@gmail.com>
|
||||||
*/
|
*/
|
||||||
|
#[\Attribute(\Attribute::TARGET_PROPERTY | \Attribute::TARGET_METHOD | \Attribute::IS_REPEATABLE)]
|
||||||
class LessThanOrEqual extends AbstractComparison
|
class LessThanOrEqual extends AbstractComparison
|
||||||
{
|
{
|
||||||
const TOO_HIGH_ERROR = '30fbb013-d015-4232-8b3b-8f3be97a7e14';
|
const TOO_HIGH_ERROR = '30fbb013-d015-4232-8b3b-8f3be97a7e14';
|
||||||
|
@ -17,19 +17,10 @@ namespace Symfony\Component\Validator\Constraints;
|
|||||||
*
|
*
|
||||||
* @author Jan Schädlich <jan.schaedlich@sensiolabs.de>
|
* @author Jan Schädlich <jan.schaedlich@sensiolabs.de>
|
||||||
*/
|
*/
|
||||||
|
#[\Attribute(\Attribute::TARGET_PROPERTY | \Attribute::TARGET_METHOD | \Attribute::IS_REPEATABLE)]
|
||||||
class Negative extends LessThan
|
class Negative extends LessThan
|
||||||
{
|
{
|
||||||
use NumberConstraintTrait;
|
use ZeroComparisonConstraintTrait;
|
||||||
|
|
||||||
public $message = 'This value should be negative.';
|
public $message = 'This value should be negative.';
|
||||||
|
|
||||||
public function __construct($options = null)
|
|
||||||
{
|
|
||||||
parent::__construct($this->configureNumberConstraintOptions($options));
|
|
||||||
}
|
|
||||||
|
|
||||||
public function validatedBy(): string
|
|
||||||
{
|
|
||||||
return LessThanValidator::class;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
@ -17,19 +17,10 @@ namespace Symfony\Component\Validator\Constraints;
|
|||||||
*
|
*
|
||||||
* @author Jan Schädlich <jan.schaedlich@sensiolabs.de>
|
* @author Jan Schädlich <jan.schaedlich@sensiolabs.de>
|
||||||
*/
|
*/
|
||||||
|
#[\Attribute(\Attribute::TARGET_PROPERTY | \Attribute::TARGET_METHOD | \Attribute::IS_REPEATABLE)]
|
||||||
class NegativeOrZero extends LessThanOrEqual
|
class NegativeOrZero extends LessThanOrEqual
|
||||||
{
|
{
|
||||||
use NumberConstraintTrait;
|
use ZeroComparisonConstraintTrait;
|
||||||
|
|
||||||
public $message = 'This value should be either negative or zero.';
|
public $message = 'This value should be either negative or zero.';
|
||||||
|
|
||||||
public function __construct($options = null)
|
|
||||||
{
|
|
||||||
parent::__construct($this->configureNumberConstraintOptions($options));
|
|
||||||
}
|
|
||||||
|
|
||||||
public function validatedBy(): string
|
|
||||||
{
|
|
||||||
return LessThanOrEqualValidator::class;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
@ -18,6 +18,7 @@ namespace Symfony\Component\Validator\Constraints;
|
|||||||
* @author Daniel Holmes <daniel@danielholmes.org>
|
* @author Daniel Holmes <daniel@danielholmes.org>
|
||||||
* @author Bernhard Schussek <bschussek@gmail.com>
|
* @author Bernhard Schussek <bschussek@gmail.com>
|
||||||
*/
|
*/
|
||||||
|
#[\Attribute(\Attribute::TARGET_PROPERTY | \Attribute::TARGET_METHOD | \Attribute::IS_REPEATABLE)]
|
||||||
class NotEqualTo extends AbstractComparison
|
class NotEqualTo extends AbstractComparison
|
||||||
{
|
{
|
||||||
const IS_EQUAL_ERROR = 'aa2e33da-25c8-4d76-8c6c-812f02ea89dd';
|
const IS_EQUAL_ERROR = 'aa2e33da-25c8-4d76-8c6c-812f02ea89dd';
|
||||||
|
@ -18,6 +18,7 @@ namespace Symfony\Component\Validator\Constraints;
|
|||||||
* @author Daniel Holmes <daniel@danielholmes.org>
|
* @author Daniel Holmes <daniel@danielholmes.org>
|
||||||
* @author Bernhard Schussek <bschussek@gmail.com>
|
* @author Bernhard Schussek <bschussek@gmail.com>
|
||||||
*/
|
*/
|
||||||
|
#[\Attribute(\Attribute::TARGET_PROPERTY | \Attribute::TARGET_METHOD | \Attribute::IS_REPEATABLE)]
|
||||||
class NotIdenticalTo extends AbstractComparison
|
class NotIdenticalTo extends AbstractComparison
|
||||||
{
|
{
|
||||||
const IS_IDENTICAL_ERROR = '4aaac518-0dda-4129-a6d9-e216b9b454a0';
|
const IS_IDENTICAL_ERROR = '4aaac518-0dda-4129-a6d9-e216b9b454a0';
|
||||||
|
@ -13,8 +13,12 @@ namespace Symfony\Component\Validator\Constraints;
|
|||||||
|
|
||||||
use Symfony\Component\Validator\Exception\ConstraintDefinitionException;
|
use Symfony\Component\Validator\Exception\ConstraintDefinitionException;
|
||||||
|
|
||||||
|
trigger_deprecation('symfony/validator', '5.2', '%s is deprecated.', NumberConstraintTrait::class);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @author Jan Schädlich <jan.schaedlich@sensiolabs.de>
|
* @author Jan Schädlich <jan.schaedlich@sensiolabs.de>
|
||||||
|
*
|
||||||
|
* @deprecated since Symfony 5.2
|
||||||
*/
|
*/
|
||||||
trait NumberConstraintTrait
|
trait NumberConstraintTrait
|
||||||
{
|
{
|
||||||
|
@ -17,19 +17,10 @@ namespace Symfony\Component\Validator\Constraints;
|
|||||||
*
|
*
|
||||||
* @author Jan Schädlich <jan.schaedlich@sensiolabs.de>
|
* @author Jan Schädlich <jan.schaedlich@sensiolabs.de>
|
||||||
*/
|
*/
|
||||||
|
#[\Attribute(\Attribute::TARGET_PROPERTY | \Attribute::TARGET_METHOD | \Attribute::IS_REPEATABLE)]
|
||||||
class Positive extends GreaterThan
|
class Positive extends GreaterThan
|
||||||
{
|
{
|
||||||
use NumberConstraintTrait;
|
use ZeroComparisonConstraintTrait;
|
||||||
|
|
||||||
public $message = 'This value should be positive.';
|
public $message = 'This value should be positive.';
|
||||||
|
|
||||||
public function __construct($options = null)
|
|
||||||
{
|
|
||||||
parent::__construct($this->configureNumberConstraintOptions($options));
|
|
||||||
}
|
|
||||||
|
|
||||||
public function validatedBy(): string
|
|
||||||
{
|
|
||||||
return GreaterThanValidator::class;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
@ -17,19 +17,10 @@ namespace Symfony\Component\Validator\Constraints;
|
|||||||
*
|
*
|
||||||
* @author Jan Schädlich <jan.schaedlich@sensiolabs.de>
|
* @author Jan Schädlich <jan.schaedlich@sensiolabs.de>
|
||||||
*/
|
*/
|
||||||
|
#[\Attribute(\Attribute::TARGET_PROPERTY | \Attribute::TARGET_METHOD | \Attribute::IS_REPEATABLE)]
|
||||||
class PositiveOrZero extends GreaterThanOrEqual
|
class PositiveOrZero extends GreaterThanOrEqual
|
||||||
{
|
{
|
||||||
use NumberConstraintTrait;
|
use ZeroComparisonConstraintTrait;
|
||||||
|
|
||||||
public $message = 'This value should be either positive or zero.';
|
public $message = 'This value should be either positive or zero.';
|
||||||
|
|
||||||
public function __construct($options = null)
|
|
||||||
{
|
|
||||||
parent::__construct($this->configureNumberConstraintOptions($options));
|
|
||||||
}
|
|
||||||
|
|
||||||
public function validatedBy(): string
|
|
||||||
{
|
|
||||||
return GreaterThanOrEqualValidator::class;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
@ -0,0 +1,45 @@
|
|||||||
|
<?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\Constraints;
|
||||||
|
|
||||||
|
use Symfony\Component\Validator\Exception\ConstraintDefinitionException;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @internal
|
||||||
|
*
|
||||||
|
* @author Jan Schädlich <jan.schaedlich@sensiolabs.de>
|
||||||
|
* @author Alexander M. Turek <me@derrabus.de>
|
||||||
|
*/
|
||||||
|
trait ZeroComparisonConstraintTrait
|
||||||
|
{
|
||||||
|
public function __construct(array $options = null, string $message = null, array $groups = null, $payload = null)
|
||||||
|
{
|
||||||
|
if (null === $options) {
|
||||||
|
$options = [];
|
||||||
|
}
|
||||||
|
|
||||||
|
if (isset($options['propertyPath'])) {
|
||||||
|
throw new ConstraintDefinitionException(sprintf('The "propertyPath" option of the "%s" constraint cannot be set.', static::class));
|
||||||
|
}
|
||||||
|
|
||||||
|
if (isset($options['value'])) {
|
||||||
|
throw new ConstraintDefinitionException(sprintf('The "value" option of the "%s" constraint cannot be set.', static::class));
|
||||||
|
}
|
||||||
|
|
||||||
|
parent::__construct(0, null, $message, $groups, $payload, $options);
|
||||||
|
}
|
||||||
|
|
||||||
|
public function validatedBy(): string
|
||||||
|
{
|
||||||
|
return parent::class.'Validator';
|
||||||
|
}
|
||||||
|
}
|
@ -0,0 +1,57 @@
|
|||||||
|
<?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\Constraints;
|
||||||
|
|
||||||
|
use PHPUnit\Framework\TestCase;
|
||||||
|
use Symfony\Component\Validator\Constraints\DivisibleBy;
|
||||||
|
use Symfony\Component\Validator\Mapping\ClassMetadata;
|
||||||
|
use Symfony\Component\Validator\Mapping\Loader\AnnotationLoader;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @requires PHP 8
|
||||||
|
*/
|
||||||
|
class DivisibleByTest extends TestCase
|
||||||
|
{
|
||||||
|
public function testAttributes()
|
||||||
|
{
|
||||||
|
$metadata = new ClassMetadata(DivisibleByDummy::class);
|
||||||
|
$loader = new AnnotationLoader();
|
||||||
|
self::assertTrue($loader->loadClassMetadata($metadata));
|
||||||
|
|
||||||
|
list($aConstraint) = $metadata->properties['a']->getConstraints();
|
||||||
|
self::assertSame(2, $aConstraint->value);
|
||||||
|
self::assertNull($aConstraint->propertyPath);
|
||||||
|
|
||||||
|
list($bConstraint) = $metadata->properties['b']->getConstraints();
|
||||||
|
self::assertSame(4711, $bConstraint->value);
|
||||||
|
self::assertSame('myMessage', $bConstraint->message);
|
||||||
|
self::assertSame(['Default', 'DivisibleByDummy'], $bConstraint->groups);
|
||||||
|
|
||||||
|
list($cConstraint) = $metadata->properties['c']->getConstraints();
|
||||||
|
self::assertNull($cConstraint->value);
|
||||||
|
self::assertSame('b', $cConstraint->propertyPath);
|
||||||
|
self::assertSame('myMessage', $cConstraint->message);
|
||||||
|
self::assertSame(['foo'], $cConstraint->groups);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
class DivisibleByDummy
|
||||||
|
{
|
||||||
|
#[DivisibleBy(2)]
|
||||||
|
private $a;
|
||||||
|
|
||||||
|
#[DivisibleBy(value: 4711, message: 'myMessage')]
|
||||||
|
private $b;
|
||||||
|
|
||||||
|
#[DivisibleBy(propertyPath: 'b', message: 'myMessage', groups: ['foo'])]
|
||||||
|
private $c;
|
||||||
|
}
|
@ -0,0 +1,57 @@
|
|||||||
|
<?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\Constraints;
|
||||||
|
|
||||||
|
use PHPUnit\Framework\TestCase;
|
||||||
|
use Symfony\Component\Validator\Constraints\EqualTo;
|
||||||
|
use Symfony\Component\Validator\Mapping\ClassMetadata;
|
||||||
|
use Symfony\Component\Validator\Mapping\Loader\AnnotationLoader;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @requires PHP 8
|
||||||
|
*/
|
||||||
|
class EqualToTest extends TestCase
|
||||||
|
{
|
||||||
|
public function testAttributes()
|
||||||
|
{
|
||||||
|
$metadata = new ClassMetadata(EqualToDummy::class);
|
||||||
|
$loader = new AnnotationLoader();
|
||||||
|
self::assertTrue($loader->loadClassMetadata($metadata));
|
||||||
|
|
||||||
|
list($aConstraint) = $metadata->properties['a']->getConstraints();
|
||||||
|
self::assertSame(2, $aConstraint->value);
|
||||||
|
self::assertNull($aConstraint->propertyPath);
|
||||||
|
|
||||||
|
list($bConstraint) = $metadata->properties['b']->getConstraints();
|
||||||
|
self::assertSame(4711, $bConstraint->value);
|
||||||
|
self::assertSame('myMessage', $bConstraint->message);
|
||||||
|
self::assertSame(['Default', 'EqualToDummy'], $bConstraint->groups);
|
||||||
|
|
||||||
|
list($cConstraint) = $metadata->properties['c']->getConstraints();
|
||||||
|
self::assertNull($cConstraint->value);
|
||||||
|
self::assertSame('b', $cConstraint->propertyPath);
|
||||||
|
self::assertSame('myMessage', $cConstraint->message);
|
||||||
|
self::assertSame(['foo'], $cConstraint->groups);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
class EqualToDummy
|
||||||
|
{
|
||||||
|
#[EqualTo(2)]
|
||||||
|
private $a;
|
||||||
|
|
||||||
|
#[EqualTo(value: 4711, message: 'myMessage')]
|
||||||
|
private $b;
|
||||||
|
|
||||||
|
#[EqualTo(propertyPath: 'b', message: 'myMessage', groups: ['foo'])]
|
||||||
|
private $c;
|
||||||
|
}
|
@ -0,0 +1,57 @@
|
|||||||
|
<?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\Constraints;
|
||||||
|
|
||||||
|
use PHPUnit\Framework\TestCase;
|
||||||
|
use Symfony\Component\Validator\Constraints\GreaterThanOrEqual;
|
||||||
|
use Symfony\Component\Validator\Mapping\ClassMetadata;
|
||||||
|
use Symfony\Component\Validator\Mapping\Loader\AnnotationLoader;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @requires PHP 8
|
||||||
|
*/
|
||||||
|
class GreaterThanOrEqualTest extends TestCase
|
||||||
|
{
|
||||||
|
public function testAttributes()
|
||||||
|
{
|
||||||
|
$metadata = new ClassMetadata(GreaterThanOrEqualDummy::class);
|
||||||
|
$loader = new AnnotationLoader();
|
||||||
|
self::assertTrue($loader->loadClassMetadata($metadata));
|
||||||
|
|
||||||
|
list($aConstraint) = $metadata->properties['a']->getConstraints();
|
||||||
|
self::assertSame(2, $aConstraint->value);
|
||||||
|
self::assertNull($aConstraint->propertyPath);
|
||||||
|
|
||||||
|
list($bConstraint) = $metadata->properties['b']->getConstraints();
|
||||||
|
self::assertSame(4711, $bConstraint->value);
|
||||||
|
self::assertSame('myMessage', $bConstraint->message);
|
||||||
|
self::assertSame(['Default', 'GreaterThanOrEqualDummy'], $bConstraint->groups);
|
||||||
|
|
||||||
|
list($cConstraint) = $metadata->properties['c']->getConstraints();
|
||||||
|
self::assertNull($cConstraint->value);
|
||||||
|
self::assertSame('b', $cConstraint->propertyPath);
|
||||||
|
self::assertSame('myMessage', $cConstraint->message);
|
||||||
|
self::assertSame(['foo'], $cConstraint->groups);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
class GreaterThanOrEqualDummy
|
||||||
|
{
|
||||||
|
#[GreaterThanOrEqual(2)]
|
||||||
|
private $a;
|
||||||
|
|
||||||
|
#[GreaterThanOrEqual(value: 4711, message: 'myMessage')]
|
||||||
|
private $b;
|
||||||
|
|
||||||
|
#[GreaterThanOrEqual(propertyPath: 'b', message: 'myMessage', groups: ['foo'])]
|
||||||
|
private $c;
|
||||||
|
}
|
@ -0,0 +1,57 @@
|
|||||||
|
<?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\Constraints;
|
||||||
|
|
||||||
|
use PHPUnit\Framework\TestCase;
|
||||||
|
use Symfony\Component\Validator\Constraints\GreaterThan;
|
||||||
|
use Symfony\Component\Validator\Mapping\ClassMetadata;
|
||||||
|
use Symfony\Component\Validator\Mapping\Loader\AnnotationLoader;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @requires PHP 8
|
||||||
|
*/
|
||||||
|
class GreaterThanTest extends TestCase
|
||||||
|
{
|
||||||
|
public function testAttributes()
|
||||||
|
{
|
||||||
|
$metadata = new ClassMetadata(GreaterThanDummy::class);
|
||||||
|
$loader = new AnnotationLoader();
|
||||||
|
self::assertTrue($loader->loadClassMetadata($metadata));
|
||||||
|
|
||||||
|
list($aConstraint) = $metadata->properties['a']->getConstraints();
|
||||||
|
self::assertSame(2, $aConstraint->value);
|
||||||
|
self::assertNull($aConstraint->propertyPath);
|
||||||
|
|
||||||
|
list($bConstraint) = $metadata->properties['b']->getConstraints();
|
||||||
|
self::assertSame(4711, $bConstraint->value);
|
||||||
|
self::assertSame('myMessage', $bConstraint->message);
|
||||||
|
self::assertSame(['Default', 'GreaterThanDummy'], $bConstraint->groups);
|
||||||
|
|
||||||
|
list($cConstraint) = $metadata->properties['c']->getConstraints();
|
||||||
|
self::assertNull($cConstraint->value);
|
||||||
|
self::assertSame('b', $cConstraint->propertyPath);
|
||||||
|
self::assertSame('myMessage', $cConstraint->message);
|
||||||
|
self::assertSame(['foo'], $cConstraint->groups);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
class GreaterThanDummy
|
||||||
|
{
|
||||||
|
#[GreaterThan(2)]
|
||||||
|
private $a;
|
||||||
|
|
||||||
|
#[GreaterThan(value: 4711, message: 'myMessage')]
|
||||||
|
private $b;
|
||||||
|
|
||||||
|
#[GreaterThan(propertyPath: 'b', message: 'myMessage', groups: ['foo'])]
|
||||||
|
private $c;
|
||||||
|
}
|
@ -0,0 +1,57 @@
|
|||||||
|
<?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\Constraints;
|
||||||
|
|
||||||
|
use PHPUnit\Framework\TestCase;
|
||||||
|
use Symfony\Component\Validator\Constraints\IdenticalTo;
|
||||||
|
use Symfony\Component\Validator\Mapping\ClassMetadata;
|
||||||
|
use Symfony\Component\Validator\Mapping\Loader\AnnotationLoader;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @requires PHP 8
|
||||||
|
*/
|
||||||
|
class IdenticalToTest extends TestCase
|
||||||
|
{
|
||||||
|
public function testAttributes()
|
||||||
|
{
|
||||||
|
$metadata = new ClassMetadata(IdenticalToDummy::class);
|
||||||
|
$loader = new AnnotationLoader();
|
||||||
|
self::assertTrue($loader->loadClassMetadata($metadata));
|
||||||
|
|
||||||
|
list($aConstraint) = $metadata->properties['a']->getConstraints();
|
||||||
|
self::assertSame(2, $aConstraint->value);
|
||||||
|
self::assertNull($aConstraint->propertyPath);
|
||||||
|
|
||||||
|
list($bConstraint) = $metadata->properties['b']->getConstraints();
|
||||||
|
self::assertSame(4711, $bConstraint->value);
|
||||||
|
self::assertSame('myMessage', $bConstraint->message);
|
||||||
|
self::assertSame(['Default', 'IdenticalToDummy'], $bConstraint->groups);
|
||||||
|
|
||||||
|
list($cConstraint) = $metadata->properties['c']->getConstraints();
|
||||||
|
self::assertNull($cConstraint->value);
|
||||||
|
self::assertSame('b', $cConstraint->propertyPath);
|
||||||
|
self::assertSame('myMessage', $cConstraint->message);
|
||||||
|
self::assertSame(['foo'], $cConstraint->groups);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
class IdenticalToDummy
|
||||||
|
{
|
||||||
|
#[IdenticalTo(2)]
|
||||||
|
private $a;
|
||||||
|
|
||||||
|
#[IdenticalTo(value: 4711, message: 'myMessage')]
|
||||||
|
private $b;
|
||||||
|
|
||||||
|
#[IdenticalTo(propertyPath: 'b', message: 'myMessage', groups: ['foo'])]
|
||||||
|
private $c;
|
||||||
|
}
|
@ -0,0 +1,57 @@
|
|||||||
|
<?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\Constraints;
|
||||||
|
|
||||||
|
use PHPUnit\Framework\TestCase;
|
||||||
|
use Symfony\Component\Validator\Constraints\LessThanOrEqual;
|
||||||
|
use Symfony\Component\Validator\Mapping\ClassMetadata;
|
||||||
|
use Symfony\Component\Validator\Mapping\Loader\AnnotationLoader;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @requires PHP 8
|
||||||
|
*/
|
||||||
|
class LessThanOrEqualTest extends TestCase
|
||||||
|
{
|
||||||
|
public function testAttributes()
|
||||||
|
{
|
||||||
|
$metadata = new ClassMetadata(LessThanOrEqualDummy::class);
|
||||||
|
$loader = new AnnotationLoader();
|
||||||
|
self::assertTrue($loader->loadClassMetadata($metadata));
|
||||||
|
|
||||||
|
list($aConstraint) = $metadata->properties['a']->getConstraints();
|
||||||
|
self::assertSame(2, $aConstraint->value);
|
||||||
|
self::assertNull($aConstraint->propertyPath);
|
||||||
|
|
||||||
|
list($bConstraint) = $metadata->properties['b']->getConstraints();
|
||||||
|
self::assertSame(4711, $bConstraint->value);
|
||||||
|
self::assertSame('myMessage', $bConstraint->message);
|
||||||
|
self::assertSame(['Default', 'LessThanOrEqualDummy'], $bConstraint->groups);
|
||||||
|
|
||||||
|
list($cConstraint) = $metadata->properties['c']->getConstraints();
|
||||||
|
self::assertNull($cConstraint->value);
|
||||||
|
self::assertSame('b', $cConstraint->propertyPath);
|
||||||
|
self::assertSame('myMessage', $cConstraint->message);
|
||||||
|
self::assertSame(['foo'], $cConstraint->groups);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
class LessThanOrEqualDummy
|
||||||
|
{
|
||||||
|
#[LessThanOrEqual(2)]
|
||||||
|
private $a;
|
||||||
|
|
||||||
|
#[LessThanOrEqual(value: 4711, message: 'myMessage')]
|
||||||
|
private $b;
|
||||||
|
|
||||||
|
#[LessThanOrEqual(propertyPath: 'b', message: 'myMessage', groups: ['foo'])]
|
||||||
|
private $c;
|
||||||
|
}
|
@ -0,0 +1,57 @@
|
|||||||
|
<?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\Constraints;
|
||||||
|
|
||||||
|
use PHPUnit\Framework\TestCase;
|
||||||
|
use Symfony\Component\Validator\Constraints\LessThan;
|
||||||
|
use Symfony\Component\Validator\Mapping\ClassMetadata;
|
||||||
|
use Symfony\Component\Validator\Mapping\Loader\AnnotationLoader;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @requires PHP 8
|
||||||
|
*/
|
||||||
|
class LessThanTest extends TestCase
|
||||||
|
{
|
||||||
|
public function testAttributes()
|
||||||
|
{
|
||||||
|
$metadata = new ClassMetadata(LessThanDummy::class);
|
||||||
|
$loader = new AnnotationLoader();
|
||||||
|
self::assertTrue($loader->loadClassMetadata($metadata));
|
||||||
|
|
||||||
|
list($aConstraint) = $metadata->properties['a']->getConstraints();
|
||||||
|
self::assertSame(2, $aConstraint->value);
|
||||||
|
self::assertNull($aConstraint->propertyPath);
|
||||||
|
|
||||||
|
list($bConstraint) = $metadata->properties['b']->getConstraints();
|
||||||
|
self::assertSame(4711, $bConstraint->value);
|
||||||
|
self::assertSame('myMessage', $bConstraint->message);
|
||||||
|
self::assertSame(['Default', 'LessThanDummy'], $bConstraint->groups);
|
||||||
|
|
||||||
|
list($cConstraint) = $metadata->properties['c']->getConstraints();
|
||||||
|
self::assertNull($cConstraint->value);
|
||||||
|
self::assertSame('b', $cConstraint->propertyPath);
|
||||||
|
self::assertSame('myMessage', $cConstraint->message);
|
||||||
|
self::assertSame(['foo'], $cConstraint->groups);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
class LessThanDummy
|
||||||
|
{
|
||||||
|
#[LessThan(2)]
|
||||||
|
private $a;
|
||||||
|
|
||||||
|
#[LessThan(value: 4711, message: 'myMessage')]
|
||||||
|
private $b;
|
||||||
|
|
||||||
|
#[LessThan(propertyPath: 'b', message: 'myMessage', groups: ['foo'])]
|
||||||
|
private $c;
|
||||||
|
}
|
@ -0,0 +1,48 @@
|
|||||||
|
<?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\Constraints;
|
||||||
|
|
||||||
|
use PHPUnit\Framework\TestCase;
|
||||||
|
use Symfony\Component\Validator\Constraints\NegativeOrZero;
|
||||||
|
use Symfony\Component\Validator\Mapping\ClassMetadata;
|
||||||
|
use Symfony\Component\Validator\Mapping\Loader\AnnotationLoader;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @requires PHP 8
|
||||||
|
*/
|
||||||
|
class NegativeOrZeroTest extends TestCase
|
||||||
|
{
|
||||||
|
public function testAttributes()
|
||||||
|
{
|
||||||
|
$metadata = new ClassMetadata(NegativeOrZeroDummy::class);
|
||||||
|
$loader = new AnnotationLoader();
|
||||||
|
self::assertTrue($loader->loadClassMetadata($metadata));
|
||||||
|
|
||||||
|
list($aConstraint) = $metadata->properties['a']->getConstraints();
|
||||||
|
self::assertSame(0, $aConstraint->value);
|
||||||
|
self::assertNull($aConstraint->propertyPath);
|
||||||
|
self::assertSame(['Default', 'NegativeOrZeroDummy'], $aConstraint->groups);
|
||||||
|
|
||||||
|
list($bConstraint) = $metadata->properties['b']->getConstraints();
|
||||||
|
self::assertSame('myMessage', $bConstraint->message);
|
||||||
|
self::assertSame(['foo'], $bConstraint->groups);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
class NegativeOrZeroDummy
|
||||||
|
{
|
||||||
|
#[NegativeOrZero]
|
||||||
|
private $a;
|
||||||
|
|
||||||
|
#[NegativeOrZero(message: 'myMessage', groups: ['foo'])]
|
||||||
|
private $b;
|
||||||
|
}
|
@ -0,0 +1,48 @@
|
|||||||
|
<?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\Constraints;
|
||||||
|
|
||||||
|
use PHPUnit\Framework\TestCase;
|
||||||
|
use Symfony\Component\Validator\Constraints\Negative;
|
||||||
|
use Symfony\Component\Validator\Mapping\ClassMetadata;
|
||||||
|
use Symfony\Component\Validator\Mapping\Loader\AnnotationLoader;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @requires PHP 8
|
||||||
|
*/
|
||||||
|
class NegativeTest extends TestCase
|
||||||
|
{
|
||||||
|
public function testAttributes()
|
||||||
|
{
|
||||||
|
$metadata = new ClassMetadata(NegativeDummy::class);
|
||||||
|
$loader = new AnnotationLoader();
|
||||||
|
self::assertTrue($loader->loadClassMetadata($metadata));
|
||||||
|
|
||||||
|
list($aConstraint) = $metadata->properties['a']->getConstraints();
|
||||||
|
self::assertSame(0, $aConstraint->value);
|
||||||
|
self::assertNull($aConstraint->propertyPath);
|
||||||
|
self::assertSame(['Default', 'NegativeDummy'], $aConstraint->groups);
|
||||||
|
|
||||||
|
list($bConstraint) = $metadata->properties['b']->getConstraints();
|
||||||
|
self::assertSame('myMessage', $bConstraint->message);
|
||||||
|
self::assertSame(['foo'], $bConstraint->groups);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
class NegativeDummy
|
||||||
|
{
|
||||||
|
#[Negative]
|
||||||
|
private $a;
|
||||||
|
|
||||||
|
#[Negative(message: 'myMessage', groups: ['foo'])]
|
||||||
|
private $b;
|
||||||
|
}
|
@ -0,0 +1,57 @@
|
|||||||
|
<?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\Constraints;
|
||||||
|
|
||||||
|
use PHPUnit\Framework\TestCase;
|
||||||
|
use Symfony\Component\Validator\Constraints\NotEqualTo;
|
||||||
|
use Symfony\Component\Validator\Mapping\ClassMetadata;
|
||||||
|
use Symfony\Component\Validator\Mapping\Loader\AnnotationLoader;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @requires PHP 8
|
||||||
|
*/
|
||||||
|
class NotEqualToTest extends TestCase
|
||||||
|
{
|
||||||
|
public function testAttributes()
|
||||||
|
{
|
||||||
|
$metadata = new ClassMetadata(NotEqualToDummy::class);
|
||||||
|
$loader = new AnnotationLoader();
|
||||||
|
self::assertTrue($loader->loadClassMetadata($metadata));
|
||||||
|
|
||||||
|
list($aConstraint) = $metadata->properties['a']->getConstraints();
|
||||||
|
self::assertSame(2, $aConstraint->value);
|
||||||
|
self::assertNull($aConstraint->propertyPath);
|
||||||
|
|
||||||
|
list($bConstraint) = $metadata->properties['b']->getConstraints();
|
||||||
|
self::assertSame(4711, $bConstraint->value);
|
||||||
|
self::assertSame('myMessage', $bConstraint->message);
|
||||||
|
self::assertSame(['Default', 'NotEqualToDummy'], $bConstraint->groups);
|
||||||
|
|
||||||
|
list($cConstraint) = $metadata->properties['c']->getConstraints();
|
||||||
|
self::assertNull($cConstraint->value);
|
||||||
|
self::assertSame('b', $cConstraint->propertyPath);
|
||||||
|
self::assertSame('myMessage', $cConstraint->message);
|
||||||
|
self::assertSame(['foo'], $cConstraint->groups);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
class NotEqualToDummy
|
||||||
|
{
|
||||||
|
#[NotEqualTo(2)]
|
||||||
|
private $a;
|
||||||
|
|
||||||
|
#[NotEqualTo(value: 4711, message: 'myMessage')]
|
||||||
|
private $b;
|
||||||
|
|
||||||
|
#[NotEqualTo(propertyPath: 'b', message: 'myMessage', groups: ['foo'])]
|
||||||
|
private $c;
|
||||||
|
}
|
@ -0,0 +1,57 @@
|
|||||||
|
<?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\Constraints;
|
||||||
|
|
||||||
|
use PHPUnit\Framework\TestCase;
|
||||||
|
use Symfony\Component\Validator\Constraints\NotIdenticalTo;
|
||||||
|
use Symfony\Component\Validator\Mapping\ClassMetadata;
|
||||||
|
use Symfony\Component\Validator\Mapping\Loader\AnnotationLoader;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @requires PHP 8
|
||||||
|
*/
|
||||||
|
class NotIdenticalToTest extends TestCase
|
||||||
|
{
|
||||||
|
public function testAttributes()
|
||||||
|
{
|
||||||
|
$metadata = new ClassMetadata(NotIdenticalToDummy::class);
|
||||||
|
$loader = new AnnotationLoader();
|
||||||
|
self::assertTrue($loader->loadClassMetadata($metadata));
|
||||||
|
|
||||||
|
list($aConstraint) = $metadata->properties['a']->getConstraints();
|
||||||
|
self::assertSame(2, $aConstraint->value);
|
||||||
|
self::assertNull($aConstraint->propertyPath);
|
||||||
|
|
||||||
|
list($bConstraint) = $metadata->properties['b']->getConstraints();
|
||||||
|
self::assertSame(4711, $bConstraint->value);
|
||||||
|
self::assertSame('myMessage', $bConstraint->message);
|
||||||
|
self::assertSame(['Default', 'NotIdenticalToDummy'], $bConstraint->groups);
|
||||||
|
|
||||||
|
list($cConstraint) = $metadata->properties['c']->getConstraints();
|
||||||
|
self::assertNull($cConstraint->value);
|
||||||
|
self::assertSame('b', $cConstraint->propertyPath);
|
||||||
|
self::assertSame('myMessage', $cConstraint->message);
|
||||||
|
self::assertSame(['foo'], $cConstraint->groups);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
class NotIdenticalToDummy
|
||||||
|
{
|
||||||
|
#[NotIdenticalTo(2)]
|
||||||
|
private $a;
|
||||||
|
|
||||||
|
#[NotIdenticalTo(value: 4711, message: 'myMessage')]
|
||||||
|
private $b;
|
||||||
|
|
||||||
|
#[NotIdenticalTo(propertyPath: 'b', message: 'myMessage', groups: ['foo'])]
|
||||||
|
private $c;
|
||||||
|
}
|
@ -0,0 +1,48 @@
|
|||||||
|
<?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\Constraints;
|
||||||
|
|
||||||
|
use PHPUnit\Framework\TestCase;
|
||||||
|
use Symfony\Component\Validator\Constraints\PositiveOrZero;
|
||||||
|
use Symfony\Component\Validator\Mapping\ClassMetadata;
|
||||||
|
use Symfony\Component\Validator\Mapping\Loader\AnnotationLoader;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @requires PHP 8
|
||||||
|
*/
|
||||||
|
class PositiveOrZeroTest extends TestCase
|
||||||
|
{
|
||||||
|
public function testAttributes()
|
||||||
|
{
|
||||||
|
$metadata = new ClassMetadata(PositiveOrZeroDummy::class);
|
||||||
|
$loader = new AnnotationLoader();
|
||||||
|
self::assertTrue($loader->loadClassMetadata($metadata));
|
||||||
|
|
||||||
|
list($aConstraint) = $metadata->properties['a']->getConstraints();
|
||||||
|
self::assertSame(0, $aConstraint->value);
|
||||||
|
self::assertNull($aConstraint->propertyPath);
|
||||||
|
self::assertSame(['Default', 'PositiveOrZeroDummy'], $aConstraint->groups);
|
||||||
|
|
||||||
|
list($bConstraint) = $metadata->properties['b']->getConstraints();
|
||||||
|
self::assertSame('myMessage', $bConstraint->message);
|
||||||
|
self::assertSame(['foo'], $bConstraint->groups);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
class PositiveOrZeroDummy
|
||||||
|
{
|
||||||
|
#[PositiveOrZero]
|
||||||
|
private $a;
|
||||||
|
|
||||||
|
#[PositiveOrZero(message: 'myMessage', groups: ['foo'])]
|
||||||
|
private $b;
|
||||||
|
}
|
@ -0,0 +1,48 @@
|
|||||||
|
<?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\Constraints;
|
||||||
|
|
||||||
|
use PHPUnit\Framework\TestCase;
|
||||||
|
use Symfony\Component\Validator\Constraints\Positive;
|
||||||
|
use Symfony\Component\Validator\Mapping\ClassMetadata;
|
||||||
|
use Symfony\Component\Validator\Mapping\Loader\AnnotationLoader;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @requires PHP 8
|
||||||
|
*/
|
||||||
|
class PositiveTest extends TestCase
|
||||||
|
{
|
||||||
|
public function testAttributes()
|
||||||
|
{
|
||||||
|
$metadata = new ClassMetadata(PositiveDummy::class);
|
||||||
|
$loader = new AnnotationLoader();
|
||||||
|
self::assertTrue($loader->loadClassMetadata($metadata));
|
||||||
|
|
||||||
|
list($aConstraint) = $metadata->properties['a']->getConstraints();
|
||||||
|
self::assertSame(0, $aConstraint->value);
|
||||||
|
self::assertNull($aConstraint->propertyPath);
|
||||||
|
self::assertSame(['Default', 'PositiveDummy'], $aConstraint->groups);
|
||||||
|
|
||||||
|
list($bConstraint) = $metadata->properties['b']->getConstraints();
|
||||||
|
self::assertSame('myMessage', $bConstraint->message);
|
||||||
|
self::assertSame(['foo'], $bConstraint->groups);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
class PositiveDummy
|
||||||
|
{
|
||||||
|
#[Positive]
|
||||||
|
private $a;
|
||||||
|
|
||||||
|
#[Positive(message: 'myMessage', groups: ['foo'])]
|
||||||
|
private $b;
|
||||||
|
}
|
Reference in New Issue
Block a user