Skip to content

Commit 5de42fe

Browse files
committed
Leverage the match expression
1 parent d2f927e commit 5de42fe

File tree

2 files changed

+61
-80
lines changed

2 files changed

+61
-80
lines changed

Form/DoctrineOrmTypeGuesser.php

Lines changed: 33 additions & 38 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,16 @@
1717
use Doctrine\Persistence\ManagerRegistry;
1818
use Doctrine\Persistence\Mapping\MappingException;
1919
use Doctrine\Persistence\Proxy;
20+
use Symfony\Component\Form\Extension\Core\Type\CheckboxType;
21+
use Symfony\Component\Form\Extension\Core\Type\CollectionType;
22+
use Symfony\Component\Form\Extension\Core\Type\DateIntervalType;
23+
use Symfony\Component\Form\Extension\Core\Type\DateTimeType;
24+
use Symfony\Component\Form\Extension\Core\Type\DateType;
25+
use Symfony\Component\Form\Extension\Core\Type\IntegerType;
26+
use Symfony\Component\Form\Extension\Core\Type\NumberType;
27+
use Symfony\Component\Form\Extension\Core\Type\TextareaType;
28+
use Symfony\Component\Form\Extension\Core\Type\TextType;
29+
use Symfony\Component\Form\Extension\Core\Type\TimeType;
2030
use Symfony\Component\Form\FormTypeGuesserInterface;
2131
use Symfony\Component\Form\Guess\Guess;
2232
use Symfony\Component\Form\Guess\TypeGuess;
@@ -51,44 +61,29 @@ public function guessType(string $class, string $property): ?TypeGuess
5161
return new TypeGuess('Symfony\Bridge\Doctrine\Form\Type\EntityType', ['em' => $name, 'class' => $mapping['targetEntity'], 'multiple' => $multiple], Guess::HIGH_CONFIDENCE);
5262
}
5363

54-
switch ($metadata->getTypeOfField($property)) {
55-
case Types::ARRAY:
56-
case Types::SIMPLE_ARRAY:
57-
return new TypeGuess('Symfony\Component\Form\Extension\Core\Type\CollectionType', [], Guess::MEDIUM_CONFIDENCE);
58-
case Types::BOOLEAN:
59-
return new TypeGuess('Symfony\Component\Form\Extension\Core\Type\CheckboxType', [], Guess::HIGH_CONFIDENCE);
60-
case Types::DATETIME_MUTABLE:
61-
case Types::DATETIMETZ_MUTABLE:
62-
case 'vardatetime':
63-
return new TypeGuess('Symfony\Component\Form\Extension\Core\Type\DateTimeType', [], Guess::HIGH_CONFIDENCE);
64-
case Types::DATETIME_IMMUTABLE:
65-
case Types::DATETIMETZ_IMMUTABLE:
66-
return new TypeGuess('Symfony\Component\Form\Extension\Core\Type\DateTimeType', ['input' => 'datetime_immutable'], Guess::HIGH_CONFIDENCE);
67-
case Types::DATEINTERVAL:
68-
return new TypeGuess('Symfony\Component\Form\Extension\Core\Type\DateIntervalType', [], Guess::HIGH_CONFIDENCE);
69-
case Types::DATE_MUTABLE:
70-
return new TypeGuess('Symfony\Component\Form\Extension\Core\Type\DateType', [], Guess::HIGH_CONFIDENCE);
71-
case Types::DATE_IMMUTABLE:
72-
return new TypeGuess('Symfony\Component\Form\Extension\Core\Type\DateType', ['input' => 'datetime_immutable'], Guess::HIGH_CONFIDENCE);
73-
case Types::TIME_MUTABLE:
74-
return new TypeGuess('Symfony\Component\Form\Extension\Core\Type\TimeType', [], Guess::HIGH_CONFIDENCE);
75-
case Types::TIME_IMMUTABLE:
76-
return new TypeGuess('Symfony\Component\Form\Extension\Core\Type\TimeType', ['input' => 'datetime_immutable'], Guess::HIGH_CONFIDENCE);
77-
case Types::DECIMAL:
78-
return new TypeGuess('Symfony\Component\Form\Extension\Core\Type\NumberType', ['input' => 'string'], Guess::MEDIUM_CONFIDENCE);
79-
case Types::FLOAT:
80-
return new TypeGuess('Symfony\Component\Form\Extension\Core\Type\NumberType', [], Guess::MEDIUM_CONFIDENCE);
81-
case Types::INTEGER:
82-
case Types::BIGINT:
83-
case Types::SMALLINT:
84-
return new TypeGuess('Symfony\Component\Form\Extension\Core\Type\IntegerType', [], Guess::MEDIUM_CONFIDENCE);
85-
case Types::STRING:
86-
return new TypeGuess('Symfony\Component\Form\Extension\Core\Type\TextType', [], Guess::MEDIUM_CONFIDENCE);
87-
case Types::TEXT:
88-
return new TypeGuess('Symfony\Component\Form\Extension\Core\Type\TextareaType', [], Guess::MEDIUM_CONFIDENCE);
89-
default:
90-
return new TypeGuess('Symfony\Component\Form\Extension\Core\Type\TextType', [], Guess::LOW_CONFIDENCE);
91-
}
64+
return match ($metadata->getTypeOfField($property)) {
65+
Types::ARRAY,
66+
Types::SIMPLE_ARRAY => new TypeGuess(CollectionType::class, [], Guess::MEDIUM_CONFIDENCE),
67+
Types::BOOLEAN => new TypeGuess(CheckboxType::class, [], Guess::HIGH_CONFIDENCE),
68+
Types::DATETIME_MUTABLE,
69+
Types::DATETIMETZ_MUTABLE,
70+
'vardatetime' => new TypeGuess(DateTimeType::class, [], Guess::HIGH_CONFIDENCE),
71+
Types::DATETIME_IMMUTABLE,
72+
Types::DATETIMETZ_IMMUTABLE => new TypeGuess(DateTimeType::class, ['input' => 'datetime_immutable'], Guess::HIGH_CONFIDENCE),
73+
Types::DATEINTERVAL => new TypeGuess(DateIntervalType::class, [], Guess::HIGH_CONFIDENCE),
74+
Types::DATE_MUTABLE => new TypeGuess(DateType::class, [], Guess::HIGH_CONFIDENCE),
75+
Types::DATE_IMMUTABLE => new TypeGuess(DateType::class, ['input' => 'datetime_immutable'], Guess::HIGH_CONFIDENCE),
76+
Types::TIME_MUTABLE => new TypeGuess(TimeType::class, [], Guess::HIGH_CONFIDENCE),
77+
Types::TIME_IMMUTABLE => new TypeGuess(TimeType::class, ['input' => 'datetime_immutable'], Guess::HIGH_CONFIDENCE),
78+
Types::DECIMAL => new TypeGuess(NumberType::class, ['input' => 'string'], Guess::MEDIUM_CONFIDENCE),
79+
Types::FLOAT => new TypeGuess(NumberType::class, [], Guess::MEDIUM_CONFIDENCE),
80+
Types::INTEGER,
81+
Types::BIGINT,
82+
Types::SMALLINT => new TypeGuess(IntegerType::class, [], Guess::MEDIUM_CONFIDENCE),
83+
Types::STRING => new TypeGuess(TextType::class, [], Guess::MEDIUM_CONFIDENCE),
84+
Types::TEXT => new TypeGuess(TextareaType::class, [], Guess::MEDIUM_CONFIDENCE),
85+
default => new TypeGuess(TextType::class, [], Guess::LOW_CONFIDENCE),
86+
};
9287
}
9388

9489
/**

PropertyInfo/DoctrineExtractor.php

Lines changed: 28 additions & 42 deletions
Original file line numberDiff line numberDiff line change
@@ -247,47 +247,33 @@ private function isAssociationNullable(array $associationMapping): bool
247247
*/
248248
private function getPhpType(string $doctrineType): ?string
249249
{
250-
switch ($doctrineType) {
251-
case Types::SMALLINT:
252-
case Types::INTEGER:
253-
return Type::BUILTIN_TYPE_INT;
254-
255-
case Types::FLOAT:
256-
return Type::BUILTIN_TYPE_FLOAT;
257-
258-
case Types::BIGINT:
259-
case Types::STRING:
260-
case Types::TEXT:
261-
case Types::GUID:
262-
case Types::DECIMAL:
263-
return Type::BUILTIN_TYPE_STRING;
264-
265-
case Types::BOOLEAN:
266-
return Type::BUILTIN_TYPE_BOOL;
267-
268-
case Types::BLOB:
269-
case Types::BINARY:
270-
return Type::BUILTIN_TYPE_RESOURCE;
271-
272-
case Types::OBJECT:
273-
case Types::DATE_MUTABLE:
274-
case Types::DATETIME_MUTABLE:
275-
case Types::DATETIMETZ_MUTABLE:
276-
case 'vardatetime':
277-
case Types::TIME_MUTABLE:
278-
case Types::DATE_IMMUTABLE:
279-
case Types::DATETIME_IMMUTABLE:
280-
case Types::DATETIMETZ_IMMUTABLE:
281-
case Types::TIME_IMMUTABLE:
282-
case Types::DATEINTERVAL:
283-
return Type::BUILTIN_TYPE_OBJECT;
284-
285-
case Types::ARRAY:
286-
case Types::SIMPLE_ARRAY:
287-
case 'json_array':
288-
return Type::BUILTIN_TYPE_ARRAY;
289-
}
290-
291-
return null;
250+
return match ($doctrineType) {
251+
Types::SMALLINT,
252+
Types::INTEGER => Type::BUILTIN_TYPE_INT,
253+
Types::FLOAT => Type::BUILTIN_TYPE_FLOAT,
254+
Types::BIGINT,
255+
Types::STRING,
256+
Types::TEXT,
257+
Types::GUID,
258+
Types::DECIMAL => Type::BUILTIN_TYPE_STRING,
259+
Types::BOOLEAN => Type::BUILTIN_TYPE_BOOL,
260+
Types::BLOB,
261+
Types::BINARY => Type::BUILTIN_TYPE_RESOURCE,
262+
Types::OBJECT,
263+
Types::DATE_MUTABLE,
264+
Types::DATETIME_MUTABLE,
265+
Types::DATETIMETZ_MUTABLE,
266+
'vardatetime',
267+
Types::TIME_MUTABLE,
268+
Types::DATE_IMMUTABLE,
269+
Types::DATETIME_IMMUTABLE,
270+
Types::DATETIMETZ_IMMUTABLE,
271+
Types::TIME_IMMUTABLE,
272+
Types::DATEINTERVAL => Type::BUILTIN_TYPE_OBJECT,
273+
Types::ARRAY,
274+
Types::SIMPLE_ARRAY,
275+
'json_array' => Type::BUILTIN_TYPE_ARRAY,
276+
default => null,
277+
};
292278
}
293279
}

0 commit comments

Comments
 (0)