Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion composer.json
Original file line number Diff line number Diff line change
Expand Up @@ -38,7 +38,7 @@
"jeremykendall/php-domain-parser": "^6.0",
"moneyphp/money": "^3.0|^4.0",
"assoconnect/php-date": "^2.0",
"doctrine/orm": "^2.7",
"doctrine/orm": "^2.7|^3.0",
"symfony/intl": "^5.0|^6.0",
"assoconnect/doctrine-types-bundle": "^v2.12.0",
"assoconnect/php-percent":"^1.1",
Expand Down
9 changes: 4 additions & 5 deletions src/Test/FieldConstraintsSetProviderTestCase.php
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,7 @@
namespace AssoConnect\ValidatorBundle\Test;

use AssoConnect\ValidatorBundle\Validator\ConstraintsSetProvider\Field\FieldConstraintsSetProviderInterface;
use Doctrine\ORM\Mapping\FieldMapping;
use PHPUnit\Framework\TestCase;
use Symfony\Component\Validator\Constraint;

Expand All @@ -18,14 +19,13 @@ abstract class FieldConstraintsSetProviderTestCase extends TestCase
abstract protected function getFactory(): FieldConstraintsSetProviderInterface;

/**
* @param mixed[] $fieldMapping
* @param Constraint[] $constraints
* @dataProvider getConstraintsForTypeProvider
*/
public function testGetConstraintsForType(array $fieldMapping, array $constraints): void
public function testGetConstraintsForType(FieldMapping $fieldMapping, array $constraints): void
{
$factory = $this->getFactory();
self::assertTrue($factory->supports($fieldMapping['type']));
self::assertTrue($factory->supports($fieldMapping->type));

self::assertArrayContainsSameObjects(
/** @phpstan-ignore-next-line */
Expand All @@ -34,9 +34,8 @@ public function testGetConstraintsForType(array $fieldMapping, array $constraint
);
}

/** @return mixed[] */
/** @return iterable{FieldMapping, Constraint[]} */
abstract public function getConstraintsForTypeProvider(): iterable;

/**
* @param mixed[] $array1
* @param mixed[] $array2
Expand Down
18 changes: 8 additions & 10 deletions src/Validator/Constraints/EntityValidator.php
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,8 @@
use AssoConnect\ValidatorBundle\Exception\UnprotectedFieldTypeException;
use AssoConnect\ValidatorBundle\Validator\ConstraintsSetProvider\Field\FieldConstraintsSetProviderInterface;
use Doctrine\ORM\EntityManagerInterface;
use Doctrine\ORM\Mapping\ClassMetadataInfo;
use Doctrine\ORM\Mapping\ClassMetadata;
use Doctrine\ORM\Mapping\FieldMapping;
use Symfony\Component\PropertyAccess\Exception\UnexpectedTypeException;
use Symfony\Component\PropertyAccess\PropertyAccess;
use Symfony\Component\Validator\Constraint;
Expand All @@ -20,7 +21,7 @@

/**
* @Annotation
* @phpstan-import-type FieldMapping from ClassMetadataInfo
* @phpstan-import-type FieldMapping from ClassMetadata
*/
class EntityValidator extends ConstraintValidator
{
Expand Down Expand Up @@ -79,13 +80,12 @@ public function validate(mixed $entity, Constraint $constraint): void
}

/**
* @param FieldMapping $fieldMapping
* @return Constraint[]
*/
public function getConstraintsForType(array $fieldMapping): array
public function getConstraintsForType(FieldMapping $fieldMapping): array
{
foreach ($this->fieldConstraintsSetFactories as $fieldConstraintsSetProvider) {
if ($fieldConstraintsSetProvider->supports($fieldMapping['type'])) {
if ($fieldConstraintsSetProvider->supports($fieldMapping->type)) {
return $fieldConstraintsSetProvider->getConstraints($fieldMapping);
}
}
Expand All @@ -105,9 +105,7 @@ public function getConstraints(string $class, string $field): array
if (array_key_exists($field, $metadata->fieldMappings)) {
$fieldMapping = $metadata->fieldMappings[$field];

// Nullable field
Assert::keyExists($fieldMapping, 'nullable');
if (true !== $fieldMapping['nullable']) {
if (true !== $fieldMapping->nullable) {
$constraints[] = [new NotNull()];
}

Expand All @@ -120,7 +118,7 @@ public function getConstraints(string $class, string $field): array
$fieldMapping = $metadata->associationMappings[$field];

if (true === $fieldMapping['isOwningSide']) {
if (($fieldMapping['type'] & ClassMetadataInfo::TO_ONE) !== 0) {
if (($fieldMapping['type'] & ClassMetadata::TO_ONE) !== 0) {
// ToOne
$constraints[] = new Type($fieldMapping['targetEntity']);
// Nullable field
Expand All @@ -130,7 +128,7 @@ public function getConstraints(string $class, string $field): array
) {
$constraints[] = new NotNull();
}
} elseif (($fieldMapping['type'] & ClassMetadataInfo::TO_MANY) !== 0) {
} elseif (($fieldMapping['type'] & ClassMetadata::TO_MANY) !== 0) {
// ToMany
$constraints[] = new All(
[
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,7 @@

use AssoConnect\AbsolutePercentValueBundle\Object\AbsolutePercentValue;
use AssoConnect\DoctrineTypesBundle\Doctrine\DBAL\Types\AbsolutePercentValueType;
use Doctrine\ORM\Mapping\FieldMapping;
use Symfony\Component\Validator\Constraints\Type;

class AbsolutePercentValueProvider implements FieldConstraintsSetProviderInterface
Expand All @@ -15,7 +16,7 @@ public function supports(string $type): bool
return AbsolutePercentValueType::NAME === $type;
}

public function getConstraints(array $fieldMapping): array
public function getConstraints(FieldMapping $fieldMapping): array
{
return [
new Type(AbsolutePercentValue::class),
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,7 @@

use AssoConnect\DoctrineTypesBundle\Doctrine\DBAL\Types\AmountAsBigintType;
use AssoConnect\DoctrineTypesBundle\Doctrine\DBAL\Types\AmountType;
use Doctrine\ORM\Mapping\FieldMapping;
use Money\Money as MoneyObject;
use Symfony\Component\Validator\Constraints\Type;

Expand All @@ -16,7 +17,7 @@ public function supports(string $type): bool
return AmountType::NAME === $type || AmountAsBigintType::NAME === $type;
}

public function getConstraints(array $fieldMapping): array
public function getConstraints(FieldMapping $fieldMapping): array
{
return [
new Type(MoneyObject::class),
Expand Down
5 changes: 3 additions & 2 deletions src/Validator/ConstraintsSetProvider/Field/ArrayProvider.php
Original file line number Diff line number Diff line change
Expand Up @@ -5,16 +5,17 @@
namespace AssoConnect\ValidatorBundle\Validator\ConstraintsSetProvider\Field;

use Doctrine\DBAL\Types\Types;
use Doctrine\ORM\Mapping\FieldMapping;
use Symfony\Component\Validator\Constraints\Type;

class ArrayProvider implements FieldConstraintsSetProviderInterface
{
public function supports(string $type): bool
{
return Types::ARRAY === $type || 'simple_array' === $type;
return Types::ARRAY === $type || Types::SIMPLE_ARRAY === $type;
}

public function getConstraints(array $fieldMapping): array
public function getConstraints(FieldMapping $fieldMapping): array
{
return [
new Type('array'),
Expand Down
3 changes: 2 additions & 1 deletion src/Validator/ConstraintsSetProvider/Field/BicProvider.php
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,7 @@
namespace AssoConnect\ValidatorBundle\Validator\ConstraintsSetProvider\Field;

use AssoConnect\DoctrineTypesBundle\Doctrine\DBAL\Types\BicType;
use Doctrine\ORM\Mapping\FieldMapping;
use Symfony\Component\Validator\Constraints\Bic;
use Symfony\Component\Validator\Constraints\Regex;

Expand All @@ -15,7 +16,7 @@ public function supports(string $type): bool
return BicType::NAME === $type;
}

public function getConstraints(array $fieldMapping): array
public function getConstraints(FieldMapping $fieldMapping): array
{
return [
new Bic(),
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,7 @@
namespace AssoConnect\ValidatorBundle\Validator\ConstraintsSetProvider\Field;

use Doctrine\DBAL\Types\Types;
use Doctrine\ORM\Mapping\FieldMapping;
use Symfony\Component\Validator\Constraints\Type;

class BooleanProvider implements FieldConstraintsSetProviderInterface
Expand All @@ -14,7 +15,7 @@ public function supports(string $type): bool
return Types::BOOLEAN === $type;
}

public function getConstraints(array $fieldMapping): array
public function getConstraints(FieldMapping $fieldMapping): array
{
return [
new Type('bool'),
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,7 @@
namespace AssoConnect\ValidatorBundle\Validator\ConstraintsSetProvider\Field;

use AssoConnect\DoctrineTypesBundle\Doctrine\DBAL\Types\CountryType;
use Doctrine\ORM\Mapping\FieldMapping;
use Symfony\Component\Validator\Constraints\Country;

class CountryProvider implements FieldConstraintsSetProviderInterface
Expand All @@ -14,7 +15,7 @@ public function supports(string $type): bool
return CountryType::NAME === $type;
}

public function getConstraints(array $fieldMapping): array
public function getConstraints(FieldMapping $fieldMapping): array
{
return [
new Country(),
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,7 @@
namespace AssoConnect\ValidatorBundle\Validator\ConstraintsSetProvider\Field;

use AssoConnect\DoctrineTypesBundle\Doctrine\DBAL\Types\CurrencyType;
use Doctrine\ORM\Mapping\FieldMapping;
use Money\Currency as CurrencyObject;
use Symfony\Component\Validator\Constraints\Currency as CurrencyConstraint;
use Symfony\Component\Validator\Constraints\Type;
Expand All @@ -16,7 +17,7 @@ public function supports(string $type): bool
return CurrencyType::NAME === $type;
}

public function getConstraints(array $fieldMapping): array
public function getConstraints(FieldMapping $fieldMapping): array
{
return [
new CurrencyConstraint(),
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,7 @@
use AssoConnect\DoctrineTypesBundle\Doctrine\DBAL\Types\DateTimeImmutableMicroSecondsType;
use DateTimeImmutable;
use Doctrine\DBAL\Types\Types;
use Doctrine\ORM\Mapping\FieldMapping;
use Symfony\Component\Validator\Constraints\Type;

class DateTimeImmutableProvider implements FieldConstraintsSetProviderInterface
Expand All @@ -25,7 +26,7 @@ public function supports(string $type): bool
);
}

public function getConstraints(array $fieldMapping): array
public function getConstraints(FieldMapping $fieldMapping): array
{
return [
new Type(DateTimeImmutable::class),
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,7 @@

use DateTime;
use Doctrine\DBAL\Types\Types;
use Doctrine\ORM\Mapping\FieldMapping;
use Symfony\Component\Validator\Constraints\Type;

class DateTimeProvider implements FieldConstraintsSetProviderInterface
Expand All @@ -24,7 +25,7 @@ public function supports(string $type): bool
);
}

public function getConstraints(array $fieldMapping): array
public function getConstraints(FieldMapping $fieldMapping): array
{
return [
new Type(DateTime::class),
Expand Down
13 changes: 5 additions & 8 deletions src/Validator/ConstraintsSetProvider/Field/DecimalProvider.php
Original file line number Diff line number Diff line change
Expand Up @@ -6,10 +6,10 @@

use AssoConnect\ValidatorBundle\Validator\Constraints\FloatScale;
use Doctrine\DBAL\Types\Types;
use Doctrine\ORM\Mapping\FieldMapping;
use Symfony\Component\Validator\Constraints\GreaterThan;
use Symfony\Component\Validator\Constraints\LessThan;
use Symfony\Component\Validator\Constraints\Type;
use Webmozart\Assert\Assert;

class DecimalProvider implements FieldConstraintsSetProviderInterface
{
Expand All @@ -18,16 +18,13 @@ public function supports(string $type): bool
return Types::DECIMAL === $type;
}

public function getConstraints(array $fieldMapping): array
public function getConstraints(FieldMapping $fieldMapping): array
{
Assert::keyExists($fieldMapping, 'precision');
Assert::keyExists($fieldMapping, 'scale');

return [
new Type('float'),
new GreaterThan(- pow(10, $fieldMapping['precision'] - $fieldMapping['scale'])),
new LessThan(pow(10, $fieldMapping['precision'] - $fieldMapping['scale'])),
new FloatScale($fieldMapping['scale']),
new GreaterThan(- pow(10, $fieldMapping->precision - $fieldMapping->scale)),
new LessThan(pow(10, $fieldMapping->precision - $fieldMapping->scale)),
new FloatScale($fieldMapping->scale),
];
}
}
5 changes: 3 additions & 2 deletions src/Validator/ConstraintsSetProvider/Field/EmailProvider.php
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,7 @@

use AssoConnect\DoctrineTypesBundle\Doctrine\DBAL\Types\EmailType;
use AssoConnect\ValidatorBundle\Validator\Constraints\Email;
use Doctrine\ORM\Mapping\FieldMapping;
use Symfony\Component\Validator\Constraints\Length;

class EmailProvider implements FieldConstraintsSetProviderInterface
Expand All @@ -15,11 +16,11 @@ public function supports(string $type): bool
return EmailType::NAME === $type;
}

public function getConstraints(array $fieldMapping): array
public function getConstraints(FieldMapping $fieldMapping): array
{
return [
new Email(),
new Length(['max' => ($fieldMapping['length'] ?? 255)]),
new Length(['max' => ($fieldMapping->length ?? 255)]),
];
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -4,19 +4,19 @@

namespace AssoConnect\ValidatorBundle\Validator\ConstraintsSetProvider\Field;

use Doctrine\ORM\Mapping\ClassMetadataInfo;
use Doctrine\ORM\Mapping\ClassMetadata;
use Doctrine\ORM\Mapping\FieldMapping;
use Symfony\Component\Validator\Constraint;

/**
* @phpstan-import-type FieldMapping from ClassMetadataInfo
* @phpstan-import-type FieldMapping from ClassMetadata
*/
interface FieldConstraintsSetProviderInterface
{
public function supports(string $type): bool;

/**
* @param FieldMapping $fieldMapping
* @return Constraint[]
*/
public function getConstraints(array $fieldMapping): array;
public function getConstraints(FieldMapping $fieldMapping): array;
}
3 changes: 2 additions & 1 deletion src/Validator/ConstraintsSetProvider/Field/FloatProvider.php
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,7 @@
namespace AssoConnect\ValidatorBundle\Validator\ConstraintsSetProvider\Field;

use Doctrine\DBAL\Types\Types;
use Doctrine\ORM\Mapping\FieldMapping;
use Symfony\Component\Validator\Constraints\Type;

class FloatProvider implements FieldConstraintsSetProviderInterface
Expand All @@ -14,7 +15,7 @@ public function supports(string $type): bool
return Types::FLOAT === $type;
}

public function getConstraints(array $fieldMapping): array
public function getConstraints(FieldMapping $fieldMapping): array
{
return [
new Type('float'),
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,7 @@

use AssoConnect\DoctrineTypesBundle\Doctrine\DBAL\Types\FrenchRnaType;
use AssoConnect\ValidatorBundle\Validator\Constraints\FrenchRna;
use Doctrine\ORM\Mapping\FieldMapping;

class FrenchRnaProvider implements FieldConstraintsSetProviderInterface
{
Expand All @@ -14,7 +15,7 @@ public function supports(string $type): bool
return FrenchRnaType::NAME === $type;
}

public function getConstraints(array $fieldMapping): array
public function getConstraints(FieldMapping $fieldMapping): array
{
return [
new FrenchRna(),
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,7 @@

use AssoConnect\DoctrineTypesBundle\Doctrine\DBAL\Types\FrenchSirenType;
use AssoConnect\ValidatorBundle\Validator\Constraints\FrenchSiren;
use Doctrine\ORM\Mapping\FieldMapping;

class FrenchSirenProvider implements FieldConstraintsSetProviderInterface
{
Expand All @@ -14,7 +15,7 @@ public function supports(string $type): bool
return FrenchSirenType::NAME === $type;
}

public function getConstraints(array $fieldMapping): array
public function getConstraints(FieldMapping $fieldMapping): array
{
return [
new FrenchSiren(),
Expand Down
Loading