From ae9e07e3aeb229b30b5a683d298935692064d456 Mon Sep 17 00:00:00 2001 From: Alexander Grimalovsky Date: Mon, 26 Feb 2024 14:20:14 +0300 Subject: [PATCH 01/65] [FrameworkBundle] Fix registration of the bundle path to translation Fixup for 31d7a09bf5c423ad2003d6863d7372e49a195af1 --- .../FrameworkBundle/DependencyInjection/FrameworkExtension.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Symfony/Bundle/FrameworkBundle/DependencyInjection/FrameworkExtension.php b/src/Symfony/Bundle/FrameworkBundle/DependencyInjection/FrameworkExtension.php index 00412e5c68051..e5956d517b151 100644 --- a/src/Symfony/Bundle/FrameworkBundle/DependencyInjection/FrameworkExtension.php +++ b/src/Symfony/Bundle/FrameworkBundle/DependencyInjection/FrameworkExtension.php @@ -1349,7 +1349,7 @@ private function registerTranslatorConfiguration(array $config, ContainerBuilder $defaultDir = $container->getParameterBag()->resolveValue($config['default_path']); foreach ($container->getParameter('kernel.bundles_metadata') as $name => $bundle) { if ($container->fileExists($dir = $bundle['path'].'/Resources/translations') || $container->fileExists($dir = $bundle['path'].'/translations')) { - $dirs[] = $dir; + $dirs[] = $transPaths[] = $dir; } else { $nonExistingDirs[] = $dir; } From 2c095d8296c273b1799b43d5e222a92bd30310c7 Mon Sep 17 00:00:00 2001 From: Thomas Calvet Date: Mon, 11 Mar 2024 18:57:08 +0100 Subject: [PATCH 02/65] [HttpClient][EventSourceHttpClient] Fix consuming SSEs with \r\n separator --- .../HttpClient/EventSourceHttpClient.php | 2 +- .../Tests/EventSourceHttpClientTest.php | 21 ++++++++++++------- 2 files changed, 14 insertions(+), 9 deletions(-) diff --git a/src/Symfony/Component/HttpClient/EventSourceHttpClient.php b/src/Symfony/Component/HttpClient/EventSourceHttpClient.php index e801c1c4f39c7..89d12e87764fa 100644 --- a/src/Symfony/Component/HttpClient/EventSourceHttpClient.php +++ b/src/Symfony/Component/HttpClient/EventSourceHttpClient.php @@ -121,7 +121,7 @@ public function request(string $method, string $url, array $options = []): Respo return; } - $rx = '/((?:\r\n|[\r\n]){2,})/'; + $rx = '/((?:\r\n){2,}|\r{2,}|\n{2,})/'; $content = $state->buffer.$chunk->getContent(); if ($chunk->isLast()) { diff --git a/src/Symfony/Component/HttpClient/Tests/EventSourceHttpClientTest.php b/src/Symfony/Component/HttpClient/Tests/EventSourceHttpClientTest.php index 72eb74fb9f289..36c9d655f63c7 100644 --- a/src/Symfony/Component/HttpClient/Tests/EventSourceHttpClientTest.php +++ b/src/Symfony/Component/HttpClient/Tests/EventSourceHttpClientTest.php @@ -27,9 +27,14 @@ */ class EventSourceHttpClientTest extends TestCase { - public function testGetServerSentEvents() + /** + * @testWith ["\n"] + * ["\r"] + * ["\r\n"] + */ + public function testGetServerSentEvents(string $sep) { - $data = << false, 'http_method' => 'GET', 'url' => 'http://localhost:8080/events', 'response_headers' => ['content-type: text/event-stream']]); @@ -83,11 +88,11 @@ public function testGetServerSentEvents() $expected = [ new FirstChunk(), - new ServerSentEvent("event: builderror\nid: 46\ndata: {\"foo\": \"bar\"}\n\n"), - new ServerSentEvent("event: reload\nid: 47\ndata: {}\n\n"), - new ServerSentEvent("event: reload\nid: 48\ndata: {}\n\n"), - new ServerSentEvent("data: test\ndata:test\nid: 49\nevent: testEvent\n\n\n"), - new ServerSentEvent("id: 50\ndata: \ndata\ndata: \ndata\ndata: \n\n"), + new ServerSentEvent(str_replace("\n", $sep, "event: builderror\nid: 46\ndata: {\"foo\": \"bar\"}\n\n")), + new ServerSentEvent(str_replace("\n", $sep, "event: reload\nid: 47\ndata: {}\n\n")), + new ServerSentEvent(str_replace("\n", $sep, "event: reload\nid: 48\ndata: {}\n\n")), + new ServerSentEvent(str_replace("\n", $sep, "data: test\ndata:test\nid: 49\nevent: testEvent\n\n\n")), + new ServerSentEvent(str_replace("\n", $sep, "id: 50\ndata: \ndata\ndata: \ndata\ndata: \n\n")), ]; $i = 0; From 900d034003875d16aa7b5a293be82a9fd932c681 Mon Sep 17 00:00:00 2001 From: Mathias Arlaud Date: Wed, 29 Nov 2023 16:51:19 +0100 Subject: [PATCH 03/65] [Serializer] Fix unexpected allowed attributes --- .../Resources/config/serializer.php | 2 + .../Normalizer/AbstractObjectNormalizer.php | 4 + .../Normalizer/GetSetMethodNormalizer.php | 86 ++++++++++++++++--- .../Normalizer/ObjectNormalizer.php | 45 +++++++++- .../Normalizer/GetSetMethodNormalizerTest.php | 36 ++++++++ .../Tests/Normalizer/ObjectNormalizerTest.php | 36 ++++++++ 6 files changed, 194 insertions(+), 15 deletions(-) diff --git a/src/Symfony/Bundle/FrameworkBundle/Resources/config/serializer.php b/src/Symfony/Bundle/FrameworkBundle/Resources/config/serializer.php index ca0cf9b53612e..63964f34f5599 100644 --- a/src/Symfony/Bundle/FrameworkBundle/Resources/config/serializer.php +++ b/src/Symfony/Bundle/FrameworkBundle/Resources/config/serializer.php @@ -137,6 +137,8 @@ service('property_info')->ignoreOnInvalid(), service('serializer.mapping.class_discriminator_resolver')->ignoreOnInvalid(), null, + [], + service('property_info')->ignoreOnInvalid(), ]) ->alias(PropertyNormalizer::class, 'serializer.normalizer.property') diff --git a/src/Symfony/Component/Serializer/Normalizer/AbstractObjectNormalizer.php b/src/Symfony/Component/Serializer/Normalizer/AbstractObjectNormalizer.php index 4b03fa9ddb116..d5d34e8a75250 100644 --- a/src/Symfony/Component/Serializer/Normalizer/AbstractObjectNormalizer.php +++ b/src/Symfony/Component/Serializer/Normalizer/AbstractObjectNormalizer.php @@ -147,6 +147,8 @@ public function supportsNormalization($data, ?string $format = null) */ public function normalize($object, ?string $format = null, array $context = []) { + $context['_read_attributes'] = true; + if (!isset($context['cache_key'])) { $context['cache_key'] = $this->getCacheKey($format, $context); } @@ -359,6 +361,8 @@ public function supportsDenormalization($data, string $type, ?string $format = n */ public function denormalize($data, string $type, ?string $format = null, array $context = []) { + $context['_read_attributes'] = false; + if (!isset($context['cache_key'])) { $context['cache_key'] = $this->getCacheKey($format, $context); } diff --git a/src/Symfony/Component/Serializer/Normalizer/GetSetMethodNormalizer.php b/src/Symfony/Component/Serializer/Normalizer/GetSetMethodNormalizer.php index 8d749b4e1d489..9aaac706f2133 100644 --- a/src/Symfony/Component/Serializer/Normalizer/GetSetMethodNormalizer.php +++ b/src/Symfony/Component/Serializer/Normalizer/GetSetMethodNormalizer.php @@ -36,6 +36,7 @@ */ class GetSetMethodNormalizer extends AbstractObjectNormalizer { + private static $reflectionCache = []; private static $setterAccessibleCache = []; /** @@ -43,7 +44,7 @@ class GetSetMethodNormalizer extends AbstractObjectNormalizer */ public function supportsNormalization($data, ?string $format = null) { - return parent::supportsNormalization($data, $format) && $this->supports(\get_class($data)); + return parent::supportsNormalization($data, $format) && $this->supports(\get_class($data), true); } /** @@ -51,7 +52,7 @@ public function supportsNormalization($data, ?string $format = null) */ public function supportsDenormalization($data, string $type, ?string $format = null) { - return parent::supportsDenormalization($data, $type, $format) && $this->supports($type); + return parent::supportsDenormalization($data, $type, $format) && $this->supports($type, false); } /** @@ -63,18 +64,22 @@ public function hasCacheableSupportsMethod(): bool } /** - * Checks if the given class has any getter method. + * Checks if the given class has any getter or setter method. */ - private function supports(string $class): bool + private function supports(string $class, bool $readAttributes): bool { if (null !== $this->classDiscriminatorResolver && $this->classDiscriminatorResolver->getMappingForClass($class)) { return true; } - $class = new \ReflectionClass($class); - $methods = $class->getMethods(\ReflectionMethod::IS_PUBLIC); - foreach ($methods as $method) { - if ($this->isGetMethod($method)) { + if (!isset(self::$reflectionCache[$class])) { + self::$reflectionCache[$class] = new \ReflectionClass($class); + } + + $reflection = self::$reflectionCache[$class]; + + foreach ($reflection->getMethods(\ReflectionMethod::IS_PUBLIC) as $reflectionMethod) { + if ($readAttributes ? $this->isGetMethod($reflectionMethod) : $this->isSetMethod($reflectionMethod)) { return true; } } @@ -95,6 +100,17 @@ private function isGetMethod(\ReflectionMethod $method): bool ); } + /** + * Checks if a method's name matches /^set.+$/ and can be called non-statically with one parameter. + */ + private function isSetMethod(\ReflectionMethod $method): bool + { + return !$method->isStatic() + && (\PHP_VERSION_ID < 80000 || !$method->getAttributes(Ignore::class)) + && 1 === $method->getNumberOfRequiredParameters() + && str_starts_with($method->name, 'set'); + } + /** * {@inheritdoc} */ @@ -124,19 +140,17 @@ protected function extractAttributes(object $object, ?string $format = null, arr */ protected function getAttributeValue(object $object, string $attribute, ?string $format = null, array $context = []) { - $ucfirsted = ucfirst($attribute); - - $getter = 'get'.$ucfirsted; + $getter = 'get'.$attribute; if (method_exists($object, $getter) && \is_callable([$object, $getter])) { return $object->$getter(); } - $isser = 'is'.$ucfirsted; + $isser = 'is'.$attribute; if (method_exists($object, $isser) && \is_callable([$object, $isser])) { return $object->$isser(); } - $haser = 'has'.$ucfirsted; + $haser = 'has'.$attribute; if (method_exists($object, $haser) && \is_callable([$object, $haser])) { return $object->$haser(); } @@ -149,7 +163,7 @@ protected function getAttributeValue(object $object, string $attribute, ?string */ protected function setAttributeValue(object $object, string $attribute, $value, ?string $format = null, array $context = []) { - $setter = 'set'.ucfirst($attribute); + $setter = 'set'.$attribute; $key = \get_class($object).':'.$setter; if (!isset(self::$setterAccessibleCache[$key])) { @@ -160,4 +174,48 @@ protected function setAttributeValue(object $object, string $attribute, $value, $object->$setter($value); } } + + protected function isAllowedAttribute($classOrObject, string $attribute, ?string $format = null, array $context = []) + { + if (!parent::isAllowedAttribute($classOrObject, $attribute, $format, $context)) { + return false; + } + + $class = \is_object($classOrObject) ? \get_class($classOrObject) : $classOrObject; + + if (!isset(self::$reflectionCache[$class])) { + self::$reflectionCache[$class] = new \ReflectionClass($class); + } + + $reflection = self::$reflectionCache[$class]; + + if ($context['_read_attributes'] ?? true) { + foreach (['get', 'is', 'has'] as $getterPrefix) { + $getter = $getterPrefix.$attribute; + $reflectionMethod = $reflection->hasMethod($getter) ? $reflection->getMethod($getter) : null; + if ($reflectionMethod && $this->isGetMethod($reflectionMethod)) { + return true; + } + } + + return false; + } + + $setter = 'set'.$attribute; + if ($reflection->hasMethod($setter) && $this->isSetMethod($reflection->getMethod($setter))) { + return true; + } + + $constructor = $reflection->getConstructor(); + + if ($constructor && $constructor->isPublic()) { + foreach ($constructor->getParameters() as $parameter) { + if ($parameter->getName() === $attribute) { + return true; + } + } + } + + return false; + } } diff --git a/src/Symfony/Component/Serializer/Normalizer/ObjectNormalizer.php b/src/Symfony/Component/Serializer/Normalizer/ObjectNormalizer.php index 0dafaa7b7bd5f..434b53a87f1dc 100644 --- a/src/Symfony/Component/Serializer/Normalizer/ObjectNormalizer.php +++ b/src/Symfony/Component/Serializer/Normalizer/ObjectNormalizer.php @@ -14,7 +14,11 @@ use Symfony\Component\PropertyAccess\Exception\NoSuchPropertyException; use Symfony\Component\PropertyAccess\PropertyAccess; use Symfony\Component\PropertyAccess\PropertyAccessorInterface; +use Symfony\Component\PropertyInfo\Extractor\ReflectionExtractor; +use Symfony\Component\PropertyInfo\PropertyInfoExtractorInterface; use Symfony\Component\PropertyInfo\PropertyTypeExtractorInterface; +use Symfony\Component\PropertyInfo\PropertyWriteInfo; +use Symfony\Component\Serializer\Annotation\Ignore; use Symfony\Component\Serializer\Exception\LogicException; use Symfony\Component\Serializer\Mapping\AttributeMetadata; use Symfony\Component\Serializer\Mapping\ClassDiscriminatorResolverInterface; @@ -28,11 +32,14 @@ */ class ObjectNormalizer extends AbstractObjectNormalizer { + private static $reflectionCache = []; + protected $propertyAccessor; + protected $propertyInfoExtractor; private $objectClassResolver; - public function __construct(?ClassMetadataFactoryInterface $classMetadataFactory = null, ?NameConverterInterface $nameConverter = null, ?PropertyAccessorInterface $propertyAccessor = null, ?PropertyTypeExtractorInterface $propertyTypeExtractor = null, ?ClassDiscriminatorResolverInterface $classDiscriminatorResolver = null, ?callable $objectClassResolver = null, array $defaultContext = []) + public function __construct(?ClassMetadataFactoryInterface $classMetadataFactory = null, ?NameConverterInterface $nameConverter = null, ?PropertyAccessorInterface $propertyAccessor = null, ?PropertyTypeExtractorInterface $propertyTypeExtractor = null, ?ClassDiscriminatorResolverInterface $classDiscriminatorResolver = null, ?callable $objectClassResolver = null, array $defaultContext = [], ?PropertyInfoExtractorInterface $propertyInfoExtractor = null) { if (!class_exists(PropertyAccess::class)) { throw new LogicException('The ObjectNormalizer class requires the "PropertyAccess" component. Install "symfony/property-access" to use it.'); @@ -45,6 +52,8 @@ public function __construct(?ClassMetadataFactoryInterface $classMetadataFactory $this->objectClassResolver = $objectClassResolver ?? function ($class) { return \is_object($class) ? \get_class($class) : $class; }; + + $this->propertyInfoExtractor = $propertyInfoExtractor ?: new ReflectionExtractor(); } /** @@ -182,4 +191,38 @@ protected function getAllowedAttributes($classOrObject, array $context, bool $at return $allowedAttributes; } + + protected function isAllowedAttribute($classOrObject, string $attribute, ?string $format = null, array $context = []) + { + if (!parent::isAllowedAttribute($classOrObject, $attribute, $format, $context)) { + return false; + } + $class = \is_object($classOrObject) ? \get_class($classOrObject) : $classOrObject; + + if ($context['_read_attributes'] ?? true) { + return $this->propertyInfoExtractor->isReadable($class, $attribute) || $this->hasAttributeAccessorMethod($class, $attribute); + } + + return $this->propertyInfoExtractor->isWritable($class, $attribute) + || ($writeInfo = $this->propertyInfoExtractor->getWriteInfo($class, $attribute)) && PropertyWriteInfo::TYPE_NONE !== $writeInfo->getType(); + } + + private function hasAttributeAccessorMethod(string $class, string $attribute): bool + { + if (!isset(self::$reflectionCache[$class])) { + self::$reflectionCache[$class] = new \ReflectionClass($class); + } + + $reflection = self::$reflectionCache[$class]; + + if (!$reflection->hasMethod($attribute)) { + return false; + } + + $method = $reflection->getMethod($attribute); + + return !$method->isStatic() + && (\PHP_VERSION_ID < 80000 || !$method->getAttributes(Ignore::class)) + && !$method->getNumberOfRequiredParameters(); + } } diff --git a/src/Symfony/Component/Serializer/Tests/Normalizer/GetSetMethodNormalizerTest.php b/src/Symfony/Component/Serializer/Tests/Normalizer/GetSetMethodNormalizerTest.php index f6b2c3e69ed9b..e7c23cf58a574 100644 --- a/src/Symfony/Component/Serializer/Tests/Normalizer/GetSetMethodNormalizerTest.php +++ b/src/Symfony/Component/Serializer/Tests/Normalizer/GetSetMethodNormalizerTest.php @@ -521,6 +521,23 @@ public function testDenormalizeWithDiscriminator() $this->assertEquals($denormalized, $normalizer->denormalize(['type' => 'two', 'url' => 'url'], GetSetMethodDummyInterface::class)); } + + public function testSupportsAndNormalizeWithOnlyParentGetter() + { + $obj = new GetSetDummyChild(); + $obj->setFoo('foo'); + + $this->assertTrue($this->normalizer->supportsNormalization($obj)); + $this->assertSame(['foo' => 'foo'], $this->normalizer->normalize($obj)); + } + + public function testSupportsAndDenormalizeWithOnlyParentSetter() + { + $this->assertTrue($this->normalizer->supportsDenormalization(['foo' => 'foo'], GetSetDummyChild::class)); + + $obj = $this->normalizer->denormalize(['foo' => 'foo'], GetSetDummyChild::class); + $this->assertSame('foo', $obj->getFoo()); + } } class GetSetDummy @@ -825,3 +842,22 @@ public function setUrl(string $url): void $this->url = $url; } } + +class GetSetDummyChild extends GetSetDummyParent +{ +} + +class GetSetDummyParent +{ + private $foo; + + public function getFoo() + { + return $this->foo; + } + + public function setFoo($foo) + { + $this->foo = $foo; + } +} diff --git a/src/Symfony/Component/Serializer/Tests/Normalizer/ObjectNormalizerTest.php b/src/Symfony/Component/Serializer/Tests/Normalizer/ObjectNormalizerTest.php index 6bc99f9132854..eff523b367f98 100644 --- a/src/Symfony/Component/Serializer/Tests/Normalizer/ObjectNormalizerTest.php +++ b/src/Symfony/Component/Serializer/Tests/Normalizer/ObjectNormalizerTest.php @@ -18,6 +18,7 @@ use Symfony\Component\PropertyInfo\Extractor\PhpStanExtractor; use Symfony\Component\PropertyInfo\Extractor\ReflectionExtractor; use Symfony\Component\PropertyInfo\PropertyInfoExtractor; +use Symfony\Component\Serializer\Annotation\Ignore; use Symfony\Component\Serializer\Exception\LogicException; use Symfony\Component\Serializer\Exception\RuntimeException; use Symfony\Component\Serializer\Exception\UnexpectedValueException; @@ -919,6 +920,31 @@ public function testSamePropertyAsMethodWithMethodSerializedName() $this->assertSame($expected, $this->normalizer->normalize($object)); } + + public function testNormalizeWithIgnoreAnnotationAndPrivateProperties() + { + $classMetadataFactory = new ClassMetadataFactory(new AnnotationLoader(new AnnotationReader())); + $normalizer = new ObjectNormalizer($classMetadataFactory); + + $this->assertSame(['foo' => 'foo'], $normalizer->normalize(new ObjectDummyWithIgnoreAnnotationAndPrivateProperty())); + } + + public function testDenormalizeWithIgnoreAnnotationAndPrivateProperties() + { + $classMetadataFactory = new ClassMetadataFactory(new AnnotationLoader(new AnnotationReader())); + $normalizer = new ObjectNormalizer($classMetadataFactory); + + $obj = $normalizer->denormalize([ + 'foo' => 'set', + 'ignore' => 'set', + 'private' => 'set', + ], ObjectDummyWithIgnoreAnnotationAndPrivateProperty::class); + + $expected = new ObjectDummyWithIgnoreAnnotationAndPrivateProperty(); + $expected->foo = 'set'; + + $this->assertEquals($expected, $obj); + } } class ProxyObjectDummy extends ObjectDummy @@ -1207,3 +1233,13 @@ public function getInner() return $this->inner; } } + +class ObjectDummyWithIgnoreAnnotationAndPrivateProperty +{ + public $foo = 'foo'; + + /** @Ignore */ + public $ignored = 'ignored'; + + private $private = 'private'; +} From 6fe892f035e1b402b9e4d5bb9dab36cafa5f01b3 Mon Sep 17 00:00:00 2001 From: Mathias Arlaud Date: Thu, 23 Nov 2023 04:53:59 +0100 Subject: [PATCH 04/65] [Serializer] Fix XML scalar to object denormalization --- .../Normalizer/AbstractObjectNormalizer.php | 4 +++ .../AbstractObjectNormalizerTest.php | 36 +++++++++++++++++++ 2 files changed, 40 insertions(+) diff --git a/src/Symfony/Component/Serializer/Normalizer/AbstractObjectNormalizer.php b/src/Symfony/Component/Serializer/Normalizer/AbstractObjectNormalizer.php index 4b03fa9ddb116..283ed16910c94 100644 --- a/src/Symfony/Component/Serializer/Normalizer/AbstractObjectNormalizer.php +++ b/src/Symfony/Component/Serializer/Normalizer/AbstractObjectNormalizer.php @@ -369,6 +369,10 @@ public function denormalize($data, string $type, ?string $format = null, array $ return null; } + if (XmlEncoder::FORMAT === $format && !\is_array($data)) { + $data = ['#' => $data]; + } + $allowedAttributes = $this->getAllowedAttributes($type, $context, true); $normalizedData = $this->prepareForDenormalization($data); $extraAttributes = []; diff --git a/src/Symfony/Component/Serializer/Tests/Normalizer/AbstractObjectNormalizerTest.php b/src/Symfony/Component/Serializer/Tests/Normalizer/AbstractObjectNormalizerTest.php index 5243eb2f2ef1a..c4e966cb6c4d9 100644 --- a/src/Symfony/Component/Serializer/Tests/Normalizer/AbstractObjectNormalizerTest.php +++ b/src/Symfony/Component/Serializer/Tests/Normalizer/AbstractObjectNormalizerTest.php @@ -17,6 +17,7 @@ use Symfony\Component\PropertyInfo\Extractor\ReflectionExtractor; use Symfony\Component\PropertyInfo\PropertyInfoExtractor; use Symfony\Component\PropertyInfo\Type; +use Symfony\Component\Serializer\Annotation\SerializedName; use Symfony\Component\Serializer\Exception\ExtraAttributesException; use Symfony\Component\Serializer\Exception\InvalidArgumentException; use Symfony\Component\Serializer\Exception\LogicException; @@ -30,6 +31,7 @@ use Symfony\Component\Serializer\Mapping\Factory\ClassMetadataFactory; use Symfony\Component\Serializer\Mapping\Factory\ClassMetadataFactoryInterface; use Symfony\Component\Serializer\Mapping\Loader\AnnotationLoader; +use Symfony\Component\Serializer\NameConverter\MetadataAwareNameConverter; use Symfony\Component\Serializer\Normalizer\AbstractNormalizer; use Symfony\Component\Serializer\Normalizer\AbstractObjectNormalizer; use Symfony\Component\Serializer\Normalizer\CustomNormalizer; @@ -658,6 +660,34 @@ protected function createChildContext(array $parentContext, string $attribute, ? $this->assertFalse($normalizer->childContextCacheKey); } + + public function testDenormalizeXmlScalar() + { + $normalizer = new class () extends AbstractObjectNormalizer + { + public function __construct() + { + parent::__construct(null, new MetadataAwareNameConverter(new ClassMetadataFactory(new AnnotationLoader(new AnnotationReader())))); + } + + protected function extractAttributes(object $object, string $format = null, array $context = []): array + { + return []; + } + + protected function getAttributeValue(object $object, string $attribute, string $format = null, array $context = []) + { + return null; + } + + protected function setAttributeValue(object $object, string $attribute, $value, string $format = null, array $context = []) + { + $object->$attribute = $value; + } + }; + + $this->assertSame('scalar', $normalizer->denormalize('scalar', XmlScalarDummy::class, 'xml')->value); + } } class AbstractObjectNormalizerDummy extends AbstractObjectNormalizer @@ -781,6 +811,12 @@ class DummyChild public $bar; } +class XmlScalarDummy +{ + /** @SerializedName("#") */ + public $value; +} + class SerializerCollectionDummy implements SerializerInterface, DenormalizerInterface { private $normalizers; From 50268e6336cc17381d1b04b30195df47bd4ff0a7 Mon Sep 17 00:00:00 2001 From: Fabien Potencier Date: Wed, 3 Apr 2024 08:07:43 +0200 Subject: [PATCH 05/65] Bump Symfony version to 5.4.39 --- src/Symfony/Component/HttpKernel/Kernel.php | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/src/Symfony/Component/HttpKernel/Kernel.php b/src/Symfony/Component/HttpKernel/Kernel.php index e9507631059c1..aae7d8f9cd32c 100644 --- a/src/Symfony/Component/HttpKernel/Kernel.php +++ b/src/Symfony/Component/HttpKernel/Kernel.php @@ -78,12 +78,12 @@ abstract class Kernel implements KernelInterface, RebootableInterface, Terminabl */ private static $freshCache = []; - public const VERSION = '5.4.38'; - public const VERSION_ID = 50438; + public const VERSION = '5.4.39-DEV'; + public const VERSION_ID = 50439; public const MAJOR_VERSION = 5; public const MINOR_VERSION = 4; - public const RELEASE_VERSION = 38; - public const EXTRA_VERSION = ''; + public const RELEASE_VERSION = 39; + public const EXTRA_VERSION = 'DEV'; public const END_OF_MAINTENANCE = '11/2024'; public const END_OF_LIFE = '11/2025'; From 8a7813b6c568c44775f6dc4572108a2faaf3c93b Mon Sep 17 00:00:00 2001 From: Christian Flothmann Date: Sun, 24 Mar 2024 22:34:48 +0100 Subject: [PATCH 06/65] use local PHP web server to test HTTP stream wrappers --- .../Filesystem/Tests/FilesystemTest.php | 33 +++++++++----- .../Filesystem/Tests/Fixtures/web/index.php | 1 + .../Fixtures/web/logo_symfony_header.png | Bin 0 -> 1613 bytes .../Component/Filesystem/composer.json | 3 +- .../Mime/Tests/Part/DataPartTest.php | 41 ++++++++++-------- 5 files changed, 47 insertions(+), 31 deletions(-) create mode 100644 src/Symfony/Component/Filesystem/Tests/Fixtures/web/index.php create mode 100644 src/Symfony/Component/Filesystem/Tests/Fixtures/web/logo_symfony_header.png diff --git a/src/Symfony/Component/Filesystem/Tests/FilesystemTest.php b/src/Symfony/Component/Filesystem/Tests/FilesystemTest.php index 7280d51357bb4..47c89995f7895 100644 --- a/src/Symfony/Component/Filesystem/Tests/FilesystemTest.php +++ b/src/Symfony/Component/Filesystem/Tests/FilesystemTest.php @@ -14,6 +14,8 @@ use Symfony\Component\Filesystem\Exception\InvalidArgumentException; use Symfony\Component\Filesystem\Exception\IOException; use Symfony\Component\Filesystem\Path; +use Symfony\Component\Process\PhpExecutableFinder; +use Symfony\Component\Process\Process; /** * Test class for Filesystem. @@ -162,23 +164,32 @@ public function testCopyCreatesTargetDirectoryIfItDoesNotExist() $this->assertStringEqualsFile($targetFilePath, 'SOURCE FILE'); } - /** - * @group network - */ public function testCopyForOriginUrlsAndExistingLocalFileDefaultsToCopy() { - if (!\in_array('https', stream_get_wrappers())) { - $this->markTestSkipped('"https" stream wrapper is not enabled.'); + if (!\in_array('http', stream_get_wrappers())) { + $this->markTestSkipped('"http" stream wrapper is not enabled.'); } - $sourceFilePath = 'https://symfony.com/images/common/logo/logo_symfony_header.png'; - $targetFilePath = $this->workspace.\DIRECTORY_SEPARATOR.'copy_target_file'; - file_put_contents($targetFilePath, 'TARGET FILE'); + $finder = new PhpExecutableFinder(); + $process = new Process(array_merge([$finder->find(false)], $finder->findArguments(), ['-dopcache.enable=0', '-dvariables_order=EGPCS', '-S', '127.0.0.1:8057'])); + $process->setWorkingDirectory(__DIR__.'/Fixtures/web'); - $this->filesystem->copy($sourceFilePath, $targetFilePath, false); + $process->start(); - $this->assertFileExists($targetFilePath); - $this->assertEquals(file_get_contents($sourceFilePath), file_get_contents($targetFilePath)); + do { + usleep(50000); + } while (!@fopen('http://127.0.0.1:8057', 'r')); + + try { + $sourceFilePath = 'http://localhost:8057/logo_symfony_header.png'; + $targetFilePath = $this->workspace.\DIRECTORY_SEPARATOR.'copy_target_file'; + file_put_contents($targetFilePath, 'TARGET FILE'); + $this->filesystem->copy($sourceFilePath, $targetFilePath, false); + $this->assertFileExists($targetFilePath); + $this->assertEquals(file_get_contents($sourceFilePath), file_get_contents($targetFilePath)); + } finally { + $process->stop(); + } } public function testMkdirCreatesDirectoriesRecursively() diff --git a/src/Symfony/Component/Filesystem/Tests/Fixtures/web/index.php b/src/Symfony/Component/Filesystem/Tests/Fixtures/web/index.php new file mode 100644 index 0000000000000..b3d9bbc7f3711 --- /dev/null +++ b/src/Symfony/Component/Filesystem/Tests/Fixtures/web/index.php @@ -0,0 +1 @@ +P+)L?kDsr<&)@GO8iI-d00p^8L_t(|+TEM!dZRiFh9%=g7;pD~ zwI}6ZzB(8;nKJD&yuYTMVCl0KFQjyi)<#6Mp6LE4>r(;ITc-QME|w#UrF)|0T>4~T zx*aTKKz4L9bSh)wM0a8?U*qUDa4fIjneM@q%4{5WD0L7g3u)_D4#1)Wz1Bk z#1XoAW&(90lBP>34+4R|-LX)PxvY3eXH}Xo370YbN`T`@Q%ir}H(l%KTI8s4771lT zpB1?|`u1-KPNgMGL`v7AaX>?QV);h}Po-tvx??a?toF9PET!S#o2BuuZ6+^5=z~p|JQ9!92I2 zVF)gI9S-Ad))Rrad6S=ea-9Rrkl$>&(h!J%)bLcQ*Q(6|yL~q10x~xOr49#F=YSI# zf?Xpcb5(&5tGbiuh`?+GIPTfx(ZaO3lN`4@L)UKTn4rdM;{QF3A5U5)6RW>YMEv?8 zd7$^8C#y)=P!(6fAES7~HR*k|KBK@k>$(>;+h(nPKqi!D`g>_y=W?6VY4d~xyHhye z8S`d4O-q_Gas_fWvzp+0rY(0<6Od)M2N+LPYg2eoI;j4Fj?=5(K81`n_~06PM2-mu zH-8k&8G7NNf?(4WlCIXL&lznyn<#0{6Y!yjrWQ2Hz>o7BNdP0H;9>yv^7R)DIQq`u_J7Wn&DcA&Iq?J&Aio0P|C%2Cpoi{U9``ryk z5KQk27W$0TU!g!S0@l;G`ym~{1`TBQ*_1P=3mRqZHLAv1T`5?97A#%Cwi;EiPR)vh zY&82*b2%Z=8E61pb9zQfUKwFG5)A9oHc#wf_hM%B)L2dkbOL`lZXL zy#8~>{^@POh>Ll)5osV8trGQA>ls9BBQq@Z$kYefhOAl*o9_s=C?b5WxUU4yjde^y zmoUy~KfapD%@!Ix?hgf1>g=U6j|9Vd8y+{TQ7LDb@g0gZ7r0m|-xrJ@Fo=T-L%|eV z>%$o8;aiw=Sc!rdt<9X8(>bP0eM2xbCed2Egd7_RMmVRhFXHn!z_zp301@&O?oz%b zn517*W5L`Bk2VT?L`H{K z15CyzjG#L20J#yIpo7{93;0j{d`ZSGRU6VAJ{E2T2Zm#vZ9nHWuD*uQm3MYoN;?sw zxw{Qn=o*v}5i@=BjhsPz_q;cwJx5mbBDk&mB^0c8k{ahoKhXPz`?%ZrEu{ZiGa|w? zrFB(tFNR3j<*Kh~sRb$VV~njs z@oR+F_1X~e>f@(@bwyn`6mUuXD%{!r0{rzcR?3)nzY?eMO75qD^{l`11@WNXtDq3V zVwo=Edh3$QImy!fU`W2XT+m&UyrCPzW)1~}8ES8g(*JX>zgGGWdRYnkHtkA|00000 LNkvXXu0mjf1C89g literal 0 HcmV?d00001 diff --git a/src/Symfony/Component/Filesystem/composer.json b/src/Symfony/Component/Filesystem/composer.json index e756104cd5fa4..95e9f3f035ee8 100644 --- a/src/Symfony/Component/Filesystem/composer.json +++ b/src/Symfony/Component/Filesystem/composer.json @@ -19,7 +19,8 @@ "php": ">=7.2.5", "symfony/polyfill-ctype": "~1.8", "symfony/polyfill-mbstring": "~1.8", - "symfony/polyfill-php80": "^1.16" + "symfony/polyfill-php80": "^1.16", + "symfony/process": "^5.4|^6.4" }, "autoload": { "psr-4": { "Symfony\\Component\\Filesystem\\": "" }, diff --git a/src/Symfony/Component/Mime/Tests/Part/DataPartTest.php b/src/Symfony/Component/Mime/Tests/Part/DataPartTest.php index d0a692761fdf7..361bb00be5d19 100644 --- a/src/Symfony/Component/Mime/Tests/Part/DataPartTest.php +++ b/src/Symfony/Component/Mime/Tests/Part/DataPartTest.php @@ -138,8 +138,8 @@ public function testFromPathWithNotAFile() public function testFromPathWithUrl() { - if (!\in_array('https', stream_get_wrappers())) { - $this->markTestSkipped('"https" stream wrapper is not enabled.'); + if (!\in_array('http', stream_get_wrappers())) { + $this->markTestSkipped('"http" stream wrapper is not enabled.'); } $finder = new PhpExecutableFinder(); @@ -147,23 +147,26 @@ public function testFromPathWithUrl() $process->setWorkingDirectory(__DIR__.'/../Fixtures/web'); $process->start(); - do { - usleep(50000); - } while (!@fopen('http://127.0.0.1:8057', 'r')); - - $p = DataPart::fromPath($file = 'http://localhost:8057/logo_symfony_header.png'); - $content = file_get_contents($file); - $this->assertEquals($content, $p->getBody()); - $maxLineLength = 76; - $this->assertEquals(substr(base64_encode($content), 0, $maxLineLength), substr($p->bodyToString(), 0, $maxLineLength)); - $this->assertEquals(substr(base64_encode($content), 0, $maxLineLength), substr(implode('', iterator_to_array($p->bodyToIterable())), 0, $maxLineLength)); - $this->assertEquals('image', $p->getMediaType()); - $this->assertEquals('png', $p->getMediaSubType()); - $this->assertEquals(new Headers( - new ParameterizedHeader('Content-Type', 'image/png', ['name' => 'logo_symfony_header.png']), - new UnstructuredHeader('Content-Transfer-Encoding', 'base64'), - new ParameterizedHeader('Content-Disposition', 'attachment', ['name' => 'logo_symfony_header.png', 'filename' => 'logo_symfony_header.png']) - ), $p->getPreparedHeaders()); + try { + do { + usleep(50000); + } while (!@fopen('http://127.0.0.1:8057', 'r')); + $p = DataPart::fromPath($file = 'http://localhost:8057/logo_symfony_header.png'); + $content = file_get_contents($file); + $this->assertEquals($content, $p->getBody()); + $maxLineLength = 76; + $this->assertEquals(substr(base64_encode($content), 0, $maxLineLength), substr($p->bodyToString(), 0, $maxLineLength)); + $this->assertEquals(substr(base64_encode($content), 0, $maxLineLength), substr(implode('', iterator_to_array($p->bodyToIterable())), 0, $maxLineLength)); + $this->assertEquals('image', $p->getMediaType()); + $this->assertEquals('png', $p->getMediaSubType()); + $this->assertEquals(new Headers( + new ParameterizedHeader('Content-Type', 'image/png', ['name' => 'logo_symfony_header.png']), + new UnstructuredHeader('Content-Transfer-Encoding', 'base64'), + new ParameterizedHeader('Content-Disposition', 'attachment', ['name' => 'logo_symfony_header.png', 'filename' => 'logo_symfony_header.png']) + ), $p->getPreparedHeaders()); + } finally { + $process->stop(); + } } public function testHasContentId() From 050d8e8fbcf6eff6a1f2596ddd6c7186583abda4 Mon Sep 17 00:00:00 2001 From: Christian Flothmann Date: Fri, 29 Mar 2024 21:45:59 +0100 Subject: [PATCH 07/65] return null when message with name is not set --- src/Symfony/Component/Console/Helper/ProgressBar.php | 5 ++++- .../Component/Console/Tests/Helper/ProgressBarTest.php | 7 +++++++ 2 files changed, 11 insertions(+), 1 deletion(-) diff --git a/src/Symfony/Component/Console/Helper/ProgressBar.php b/src/Symfony/Component/Console/Helper/ProgressBar.php index 1d7b8d4562cb6..6250732eba257 100644 --- a/src/Symfony/Component/Console/Helper/ProgressBar.php +++ b/src/Symfony/Component/Console/Helper/ProgressBar.php @@ -169,9 +169,12 @@ public function setMessage(string $message, string $name = 'message') $this->messages[$name] = $message; } + /** + * @return string|null + */ public function getMessage(string $name = 'message') { - return $this->messages[$name]; + return $this->messages[$name] ?? null; } public function getStartTime(): int diff --git a/src/Symfony/Component/Console/Tests/Helper/ProgressBarTest.php b/src/Symfony/Component/Console/Tests/Helper/ProgressBarTest.php index a0c6ee129fac2..901bca630cfd1 100644 --- a/src/Symfony/Component/Console/Tests/Helper/ProgressBarTest.php +++ b/src/Symfony/Component/Console/Tests/Helper/ProgressBarTest.php @@ -1173,4 +1173,11 @@ public function testMultiLineFormatIsFullyCorrectlyWithManuallyCleanup() stream_get_contents($output->getStream()) ); } + + public function testGetNotSetMessage() + { + $progressBar = new ProgressBar($this->getOutputStream()); + + $this->assertNull($progressBar->getMessage()); + } } From d2ed4a3187ca6e45f8012c661e1a175774bf672c Mon Sep 17 00:00:00 2001 From: Jeldrik Geraedts Date: Tue, 26 Mar 2024 12:47:45 +0100 Subject: [PATCH 08/65] [FrameworkBundle] fixes #54402: Suppress PHP warning when is_readable() tries to access dirs outside of open_basedir restrictions --- .../Bundle/FrameworkBundle/Command/CacheClearCommand.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Symfony/Bundle/FrameworkBundle/Command/CacheClearCommand.php b/src/Symfony/Bundle/FrameworkBundle/Command/CacheClearCommand.php index b245dd7a68c1f..3a81a20eca0d0 100644 --- a/src/Symfony/Bundle/FrameworkBundle/Command/CacheClearCommand.php +++ b/src/Symfony/Bundle/FrameworkBundle/Command/CacheClearCommand.php @@ -202,7 +202,7 @@ private function isNfs(string $dir): bool if (null === $mounts) { $mounts = []; - if ('/' === \DIRECTORY_SEPARATOR && is_readable('/proc/mounts') && $files = @file('/proc/mounts')) { + if ('/' === \DIRECTORY_SEPARATOR && @is_readable('/proc/mounts') && $files = @file('/proc/mounts')) { foreach ($files as $mount) { $mount = \array_slice(explode(' ', $mount), 1, -3); if (!\in_array(array_pop($mount), ['vboxsf', 'nfs'])) { From 0c17a4e32707eb190a1ba99356f304a81287265e Mon Sep 17 00:00:00 2001 From: Alexandre Daubois Date: Wed, 3 Apr 2024 12:44:59 +0200 Subject: [PATCH 09/65] [Filesystem] Strengthen the check of file permissions in `dumpFile` --- src/Symfony/Component/Filesystem/Filesystem.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Symfony/Component/Filesystem/Filesystem.php b/src/Symfony/Component/Filesystem/Filesystem.php index 909810f98a959..c5cfa47140052 100644 --- a/src/Symfony/Component/Filesystem/Filesystem.php +++ b/src/Symfony/Component/Filesystem/Filesystem.php @@ -691,7 +691,7 @@ public function dumpFile(string $filename, $content) throw new IOException(sprintf('Failed to write file "%s": ', $filename).self::$lastError, 0, null, $filename); } - self::box('chmod', $tmpFile, file_exists($filename) ? fileperms($filename) : 0666 & ~umask()); + self::box('chmod', $tmpFile, @fileperms($filename) ?: 0666 & ~umask()); $this->rename($tmpFile, $filename, true); } finally { From 580b06a75e950258c9499b09c2761349fead6359 Mon Sep 17 00:00:00 2001 From: Nicolas Grekas Date: Thu, 4 Apr 2024 11:32:13 +0200 Subject: [PATCH 10/65] [Serializer] Ignore when using #[Ignore] on a non-accessor --- .../Serializer/Mapping/Loader/AnnotationLoader.php | 6 ++---- .../Tests/Mapping/Loader/AnnotationLoaderTestCase.php | 5 ++--- 2 files changed, 4 insertions(+), 7 deletions(-) diff --git a/src/Symfony/Component/Serializer/Mapping/Loader/AnnotationLoader.php b/src/Symfony/Component/Serializer/Mapping/Loader/AnnotationLoader.php index 9082a3cc260ca..82bd3b792c822 100644 --- a/src/Symfony/Component/Serializer/Mapping/Loader/AnnotationLoader.php +++ b/src/Symfony/Component/Serializer/Mapping/Loader/AnnotationLoader.php @@ -138,11 +138,9 @@ public function loadClassMetadata(ClassMetadataInterface $classMetadata) $attributeMetadata->setSerializedName($annotation->getSerializedName()); } elseif ($annotation instanceof Ignore) { - if (!$accessorOrMutator) { - throw new MappingException(sprintf('Ignore on "%s::%s()" cannot be added. Ignore can only be added on methods beginning with "get", "is", "has" or "set".', $className, $method->name)); + if ($accessorOrMutator) { + $attributeMetadata->setIgnore(true); } - - $attributeMetadata->setIgnore(true); } elseif ($annotation instanceof Context) { if (!$accessorOrMutator) { throw new MappingException(sprintf('Context on "%s::%s()" cannot be added. Context can only be added on methods beginning with "get", "is", "has" or "set".', $className, $method->name)); diff --git a/src/Symfony/Component/Serializer/Tests/Mapping/Loader/AnnotationLoaderTestCase.php b/src/Symfony/Component/Serializer/Tests/Mapping/Loader/AnnotationLoaderTestCase.php index 5c3a686647010..b60981f7ad2ea 100644 --- a/src/Symfony/Component/Serializer/Tests/Mapping/Loader/AnnotationLoaderTestCase.php +++ b/src/Symfony/Component/Serializer/Tests/Mapping/Loader/AnnotationLoaderTestCase.php @@ -141,13 +141,12 @@ public function testCanHandleUnrelatedIgnoredMethods() { $class = $this->getNamespace().'\Entity45016'; - $this->expectException(MappingException::class); - $this->expectExceptionMessage(sprintf('Ignore on "%s::badIgnore()" cannot be added', $class)); - $metadata = new ClassMetadata($class); $loader = $this->getLoaderForContextMapping(); $loader->loadClassMetadata($metadata); + + $this->assertSame(['id'], array_keys($metadata->getAttributesMetadata())); } public function testIgnoreGetterWirhRequiredParameterIfIgnoreAnnotationIsUsed() From d6874a87c6eca858d528a88ba5531b460624230e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Martin=20Ausw=C3=B6ger?= Date: Tue, 2 Apr 2024 14:30:28 +0200 Subject: [PATCH 11/65] [DomCrawler] Encode html entities only if nessecary --- src/Symfony/Component/DomCrawler/Crawler.php | 22 +++++++++++++++++-- .../Tests/AbstractCrawlerTestCase.php | 4 ++++ 2 files changed, 24 insertions(+), 2 deletions(-) diff --git a/src/Symfony/Component/DomCrawler/Crawler.php b/src/Symfony/Component/DomCrawler/Crawler.php index a6c214add0964..239ace66ef262 100644 --- a/src/Symfony/Component/DomCrawler/Crawler.php +++ b/src/Symfony/Component/DomCrawler/Crawler.php @@ -1151,12 +1151,30 @@ protected function sibling(\DOMNode $node, string $siblingDir = 'nextSibling') private function parseHtml5(string $htmlContent, string $charset = 'UTF-8'): \DOMDocument { - return $this->html5Parser->parse($this->convertToHtmlEntities($htmlContent, $charset)); + if (!$this->supportsEncoding($charset)) { + $htmlContent = $this->convertToHtmlEntities($htmlContent, $charset); + $charset = 'UTF-8'; + } + + return $this->html5Parser->parse($htmlContent, ['encoding' => $charset]); + } + + private function supportsEncoding(string $encoding): bool + { + try { + return '' === @mb_convert_encoding('', $encoding, 'UTF-8'); + } catch (\Throwable $e) { + return false; + } } private function parseXhtml(string $htmlContent, string $charset = 'UTF-8'): \DOMDocument { - $htmlContent = $this->convertToHtmlEntities($htmlContent, $charset); + if ('UTF-8' === $charset && preg_match('//u', $htmlContent)) { + $htmlContent = ''.$htmlContent; + } else { + $htmlContent = $this->convertToHtmlEntities($htmlContent, $charset); + } $internalErrors = libxml_use_internal_errors(true); if (\LIBXML_VERSION < 20900) { diff --git a/src/Symfony/Component/DomCrawler/Tests/AbstractCrawlerTestCase.php b/src/Symfony/Component/DomCrawler/Tests/AbstractCrawlerTestCase.php index 831c2f060b012..e60f3e4ef8b0b 100644 --- a/src/Symfony/Component/DomCrawler/Tests/AbstractCrawlerTestCase.php +++ b/src/Symfony/Component/DomCrawler/Tests/AbstractCrawlerTestCase.php @@ -194,6 +194,10 @@ public function testAddContent() $crawler = $this->createCrawler(); $crawler->addContent($this->getDoctype().'
'); $this->assertEquals('foo', $crawler->filterXPath('//div')->attr('class'), '->addContent() ignores bad charset'); + + $crawler = $this->createCrawler(); + $crawler->addContent($this->getDoctype().'', 'text/html; charset=UTF-8'); + $this->assertEquals('var foo = "bär";', $crawler->filterXPath('//script')->text(), '->addContent() does not interfere with script content'); } /** From e8b3160ca2d5a7e7f6125f3778fed4c0ce90c256 Mon Sep 17 00:00:00 2001 From: Kasper Hansen Date: Thu, 4 Apr 2024 21:25:31 +0200 Subject: [PATCH 12/65] [Security] Fix Danish translations --- .../Resources/translations/security.da.xlf | 20 +++++++++---------- 1 file changed, 10 insertions(+), 10 deletions(-) diff --git a/src/Symfony/Component/Security/Core/Resources/translations/security.da.xlf b/src/Symfony/Component/Security/Core/Resources/translations/security.da.xlf index bfa65ee21f2d1..bd58bee7037c2 100644 --- a/src/Symfony/Component/Security/Core/Resources/translations/security.da.xlf +++ b/src/Symfony/Component/Security/Core/Resources/translations/security.da.xlf @@ -8,11 +8,11 @@ Authentication credentials could not be found. - Loginoplysninger kan ikke findes. + Loginoplysninger kunne ikke findes. Authentication request could not be processed due to a system problem. - Godkendelsesanmodning kan ikke behandles på grund af et systemfejl. + Godkendelsesanmodningen kunne ikke behandles på grund af en systemfejl. Invalid credentials. @@ -20,7 +20,7 @@ Cookie has already been used by someone else. - Cookie er allerede brugt af en anden. + Cookie er allerede blevet brugt af en anden. Not privileged to request the resource. @@ -32,19 +32,19 @@ No authentication provider found to support the authentication token. - Ingen godkendelsesudbyder er fundet til understøttelsen af godkendelsestoken. + Ingen godkendelsesudbyder blev fundet til at understøtte godkendelsestoken. No session available, it either timed out or cookies are not enabled. - Ingen session tilgængelig, sessionen er enten udløbet eller cookies er ikke aktiveret. + Ingen session er tilgængelig. Den er enten udløbet eller cookies er ikke aktiveret. No token could be found. - Ingen token kan findes. + Ingen token kunne findes. Username could not be found. - Brugernavn kan ikke findes. + Brugernavn kunne ikke findes. Account has expired. @@ -64,15 +64,15 @@ Too many failed login attempts, please try again later. - For mange fejlede login forsøg, prøv venligst senere. + For mange mislykkede loginforsøg. Prøv venligst igen senere. Invalid or expired login link. - Ugyldigt eller udløbet login link. + Ugyldigt eller udløbet login-link. Too many failed login attempts, please try again in %minutes% minute. - For mange fejlede login forsøg, prøv igen om %minutes% minut. + For mange mislykkede loginforsøg. Prøv venligst igen om %minutes% minut. From 3d2d1d2ec44ea3694c91145947c72081d74ac32e Mon Sep 17 00:00:00 2001 From: Christian Flothmann Date: Fri, 5 Apr 2024 20:56:43 +0200 Subject: [PATCH 13/65] add translations for the requireTld constraint option message --- .../Validator/Resources/translations/validators.de.xlf | 4 ++++ .../Validator/Resources/translations/validators.en.xlf | 4 ++++ 2 files changed, 8 insertions(+) diff --git a/src/Symfony/Component/Validator/Resources/translations/validators.de.xlf b/src/Symfony/Component/Validator/Resources/translations/validators.de.xlf index 9f145fdeed911..d15fb9c3da8ed 100644 --- a/src/Symfony/Component/Validator/Resources/translations/validators.de.xlf +++ b/src/Symfony/Component/Validator/Resources/translations/validators.de.xlf @@ -438,6 +438,10 @@ This value is not a valid MAC address. Dieser Wert ist keine gültige MAC-Adresse. + + This URL does not contain a TLD. + Diese URL enthält keine TLD. + diff --git a/src/Symfony/Component/Validator/Resources/translations/validators.en.xlf b/src/Symfony/Component/Validator/Resources/translations/validators.en.xlf index 35196e572e0f0..94ff94a1ee6d9 100644 --- a/src/Symfony/Component/Validator/Resources/translations/validators.en.xlf +++ b/src/Symfony/Component/Validator/Resources/translations/validators.en.xlf @@ -438,6 +438,10 @@ This value is not a valid MAC address. This value is not a valid MAC address. + + This URL does not contain a TLD. + This URL does not contain a TLD. + From d5094eb6ff4d606963dfb3d34a758543e3ea95b5 Mon Sep 17 00:00:00 2001 From: Christian Flothmann Date: Fri, 5 Apr 2024 21:05:57 +0200 Subject: [PATCH 14/65] fix syntax for PHP 7.2 --- .../Component/HttpClient/Tests/EventSourceHttpClientTest.php | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/src/Symfony/Component/HttpClient/Tests/EventSourceHttpClientTest.php b/src/Symfony/Component/HttpClient/Tests/EventSourceHttpClientTest.php index 36c9d655f63c7..fff3a0e7c18b7 100644 --- a/src/Symfony/Component/HttpClient/Tests/EventSourceHttpClientTest.php +++ b/src/Symfony/Component/HttpClient/Tests/EventSourceHttpClientTest.php @@ -34,7 +34,7 @@ class EventSourceHttpClientTest extends TestCase */ public function testGetServerSentEvents(string $sep) { - $data = str_replace("\n", $sep, << false, 'http_method' => 'GET', 'url' => 'http://localhost:8080/events', 'response_headers' => ['content-type: text/event-stream']]); From 954f1af385536edae9a87b83da761b1de089e673 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Simon=20Andr=C3=A9?= Date: Sat, 6 Apr 2024 01:54:31 +0200 Subject: [PATCH 15/65] [HttpFoundation] Set content-type header in RedirectResponse --- src/Symfony/Component/HttpFoundation/RedirectResponse.php | 1 + .../HttpFoundation/Tests/RedirectResponseTest.php | 7 +++++++ 2 files changed, 8 insertions(+) diff --git a/src/Symfony/Component/HttpFoundation/RedirectResponse.php b/src/Symfony/Component/HttpFoundation/RedirectResponse.php index 2103280c60184..7b89f0faf610e 100644 --- a/src/Symfony/Component/HttpFoundation/RedirectResponse.php +++ b/src/Symfony/Component/HttpFoundation/RedirectResponse.php @@ -103,6 +103,7 @@ public function setTargetUrl(string $url) ', htmlspecialchars($url, \ENT_QUOTES, 'UTF-8'))); $this->headers->set('Location', $url); + $this->headers->set('Content-Type', 'text/html; charset=utf-8'); return $this; } diff --git a/src/Symfony/Component/HttpFoundation/Tests/RedirectResponseTest.php b/src/Symfony/Component/HttpFoundation/Tests/RedirectResponseTest.php index 3d2f05ffcd6a2..483bad20c7674 100644 --- a/src/Symfony/Component/HttpFoundation/Tests/RedirectResponseTest.php +++ b/src/Symfony/Component/HttpFoundation/Tests/RedirectResponseTest.php @@ -44,6 +44,13 @@ public function testGenerateLocationHeader() $this->assertEquals('foo.bar', $response->headers->get('Location')); } + public function testGenerateContentTypeHeader() + { + $response = new RedirectResponse('foo.bar'); + + $this->assertSame('text/html; charset=utf-8', $response->headers->get('Content-Type')); + } + public function testGetTargetUrl() { $response = new RedirectResponse('foo.bar'); From 22dab6798f4ff3b67ec7e3bd67bc43ae9caa9dd1 Mon Sep 17 00:00:00 2001 From: MatTheCat Date: Mon, 25 Mar 2024 14:01:48 +0100 Subject: [PATCH 16/65] [Messenger] Make Doctrine connection ignore unrelated tables on setup --- .../Bridge/Doctrine/Tests/Transport/DoctrineIntegrationTest.php | 1 + .../Messenger/Bridge/Doctrine/Transport/Connection.php | 2 +- 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/src/Symfony/Component/Messenger/Bridge/Doctrine/Tests/Transport/DoctrineIntegrationTest.php b/src/Symfony/Component/Messenger/Bridge/Doctrine/Tests/Transport/DoctrineIntegrationTest.php index e1b4d4afdda44..c4aa03ef14400 100644 --- a/src/Symfony/Component/Messenger/Bridge/Doctrine/Tests/Transport/DoctrineIntegrationTest.php +++ b/src/Symfony/Component/Messenger/Bridge/Doctrine/Tests/Transport/DoctrineIntegrationTest.php @@ -205,6 +205,7 @@ public function testItRetrieveTheMessageThatIsOlderThanRedeliverTimeout() public function testTheTransportIsSetupOnGet() { + $this->driverConnection->executeStatement('CREATE TABLE unrelated (unknown_type_column)'); $this->assertFalse($this->createSchemaManager()->tablesExist(['messenger_messages'])); $this->assertNull($this->connection->get()); diff --git a/src/Symfony/Component/Messenger/Bridge/Doctrine/Transport/Connection.php b/src/Symfony/Component/Messenger/Bridge/Doctrine/Transport/Connection.php index 79b302760ad22..100058d240fcd 100644 --- a/src/Symfony/Component/Messenger/Bridge/Doctrine/Transport/Connection.php +++ b/src/Symfony/Component/Messenger/Bridge/Doctrine/Transport/Connection.php @@ -289,7 +289,7 @@ public function setup(): void { $configuration = $this->driverConnection->getConfiguration(); $assetFilter = $configuration->getSchemaAssetsFilter(); - $configuration->setSchemaAssetsFilter(static function () { return true; }); + $configuration->setSchemaAssetsFilter(function (string $tableName) { return $tableName === $this->configuration['table_name']; }); $this->updateSchema(); $configuration->setSchemaAssetsFilter($assetFilter); $this->autoSetup = false; From 69a7867023529af868c57be763953c2b0104bdaa Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Michael=20H=C3=BCneburg?= Date: Sun, 7 Apr 2024 15:56:47 +0200 Subject: [PATCH 17/65] [HttpClient] Let curl handle transfer encoding --- src/Symfony/Component/HttpClient/CurlHttpClient.php | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/src/Symfony/Component/HttpClient/CurlHttpClient.php b/src/Symfony/Component/HttpClient/CurlHttpClient.php index 3a2fba025aeff..4c5ced322d5de 100644 --- a/src/Symfony/Component/HttpClient/CurlHttpClient.php +++ b/src/Symfony/Component/HttpClient/CurlHttpClient.php @@ -246,9 +246,8 @@ public function request(string $method, string $url, array $options = []): Respo if (isset($options['normalized_headers']['content-length'][0])) { $curlopts[\CURLOPT_INFILESIZE] = (int) substr($options['normalized_headers']['content-length'][0], \strlen('Content-Length: ')); - } - if (!isset($options['normalized_headers']['transfer-encoding'])) { - $curlopts[\CURLOPT_HTTPHEADER][] = 'Transfer-Encoding:'.(isset($curlopts[\CURLOPT_INFILESIZE]) ? '' : ' chunked'); + } elseif (!isset($options['normalized_headers']['transfer-encoding'])) { + $curlopts[\CURLOPT_INFILESIZE] = -1; } if ('POST' !== $method) { From 6a96d35cb7ac905f3300909e8a6b35d53700043c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?D=C4=81vis=20Z=C4=81l=C4=ABtis?= Date: Tue, 9 Apr 2024 10:13:52 +0300 Subject: [PATCH 18/65] [Validator] add missing lv translation --- .../Validator/Resources/translations/validators.lv.xlf | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/src/Symfony/Component/Validator/Resources/translations/validators.lv.xlf b/src/Symfony/Component/Validator/Resources/translations/validators.lv.xlf index d1222f02b72a5..5ff2c412215b2 100644 --- a/src/Symfony/Component/Validator/Resources/translations/validators.lv.xlf +++ b/src/Symfony/Component/Validator/Resources/translations/validators.lv.xlf @@ -438,6 +438,10 @@ This value is not a valid MAC address. Šī vērtība nav derīga MAC adrese. + + This URL does not contain a TLD. + Šis URL nesatur augšējā līmeņa domēnu (TLD). + From a9eeb06384935dcfe70c8ef0fad5b3f506ca0a5c Mon Sep 17 00:00:00 2001 From: Tomasz Kowalczyk Date: Mon, 8 Apr 2024 15:32:37 +0200 Subject: [PATCH 19/65] [Validator] added missing Polish translation for unit 113 --- .../Validator/Resources/translations/validators.pl.xlf | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/src/Symfony/Component/Validator/Resources/translations/validators.pl.xlf b/src/Symfony/Component/Validator/Resources/translations/validators.pl.xlf index 29180984e6dfb..f3f43d4393e4b 100644 --- a/src/Symfony/Component/Validator/Resources/translations/validators.pl.xlf +++ b/src/Symfony/Component/Validator/Resources/translations/validators.pl.xlf @@ -438,6 +438,10 @@ This value is not a valid MAC address. Ta wartość nie jest prawidłowym adresem MAC. + + This URL does not contain a TLD. + Podany adres URL nie zawiera domeny najwyższego poziomu (TLD). + From cf6151d94dd9e2bd8e33adb58d79c4d5e4abf6ca Mon Sep 17 00:00:00 2001 From: Nicolas Grekas Date: Tue, 9 Apr 2024 14:16:12 +0200 Subject: [PATCH 20/65] [Validator] Fill in trans-unit id 113: This URL does not contain a TLD. --- .github/sync-translations.php | 2 ++ .github/workflows/integration-tests.yml | 10 +++++----- .../Translation/Resources/bin/translation-status.php | 4 ++-- .../Validator/Resources/translations/validators.af.xlf | 4 ++++ .../Validator/Resources/translations/validators.ar.xlf | 4 ++++ .../Validator/Resources/translations/validators.az.xlf | 4 ++++ .../Validator/Resources/translations/validators.be.xlf | 4 ++++ .../Validator/Resources/translations/validators.bg.xlf | 4 ++++ .../Validator/Resources/translations/validators.bs.xlf | 4 ++++ .../Validator/Resources/translations/validators.ca.xlf | 4 ++++ .../Validator/Resources/translations/validators.cs.xlf | 4 ++++ .../Validator/Resources/translations/validators.cy.xlf | 4 ++++ .../Validator/Resources/translations/validators.da.xlf | 4 ++++ .../Validator/Resources/translations/validators.el.xlf | 8 ++++++-- .../Validator/Resources/translations/validators.es.xlf | 4 ++++ .../Validator/Resources/translations/validators.et.xlf | 4 ++++ .../Validator/Resources/translations/validators.eu.xlf | 4 ++++ .../Validator/Resources/translations/validators.fa.xlf | 4 ++++ .../Validator/Resources/translations/validators.fi.xlf | 4 ++++ .../Validator/Resources/translations/validators.fr.xlf | 4 ++++ .../Validator/Resources/translations/validators.gl.xlf | 4 ++++ .../Validator/Resources/translations/validators.he.xlf | 4 ++++ .../Validator/Resources/translations/validators.hr.xlf | 4 ++++ .../Validator/Resources/translations/validators.hu.xlf | 4 ++++ .../Validator/Resources/translations/validators.hy.xlf | 4 ++++ .../Validator/Resources/translations/validators.id.xlf | 4 ++++ .../Validator/Resources/translations/validators.it.xlf | 4 ++++ .../Validator/Resources/translations/validators.ja.xlf | 4 ++++ .../Validator/Resources/translations/validators.lb.xlf | 4 ++++ .../Validator/Resources/translations/validators.lt.xlf | 4 ++++ .../Validator/Resources/translations/validators.mk.xlf | 4 ++++ .../Validator/Resources/translations/validators.mn.xlf | 4 ++++ .../Validator/Resources/translations/validators.my.xlf | 4 ++++ .../Validator/Resources/translations/validators.nb.xlf | 4 ++++ .../Validator/Resources/translations/validators.nl.xlf | 4 ++++ .../Validator/Resources/translations/validators.nn.xlf | 4 ++++ .../Validator/Resources/translations/validators.no.xlf | 4 ++++ .../Validator/Resources/translations/validators.pt.xlf | 4 ++++ .../Resources/translations/validators.pt_BR.xlf | 4 ++++ .../Validator/Resources/translations/validators.ro.xlf | 4 ++++ .../Validator/Resources/translations/validators.ru.xlf | 4 ++++ .../Validator/Resources/translations/validators.sk.xlf | 4 ++++ .../Validator/Resources/translations/validators.sl.xlf | 4 ++++ .../Validator/Resources/translations/validators.sq.xlf | 4 ++++ .../Resources/translations/validators.sr_Cyrl.xlf | 4 ++++ .../Resources/translations/validators.sr_Latn.xlf | 4 ++++ .../Validator/Resources/translations/validators.sv.xlf | 4 ++++ .../Validator/Resources/translations/validators.th.xlf | 4 ++++ .../Validator/Resources/translations/validators.tl.xlf | 4 ++++ .../Validator/Resources/translations/validators.tr.xlf | 4 ++++ .../Validator/Resources/translations/validators.uk.xlf | 4 ++++ .../Validator/Resources/translations/validators.ur.xlf | 4 ++++ .../Validator/Resources/translations/validators.uz.xlf | 4 ++++ .../Validator/Resources/translations/validators.vi.xlf | 4 ++++ .../Resources/translations/validators.zh_CN.xlf | 4 ++++ .../Resources/translations/validators.zh_TW.xlf | 4 ++++ 56 files changed, 223 insertions(+), 9 deletions(-) diff --git a/.github/sync-translations.php b/.github/sync-translations.php index 13f05d1459c86..fa3b28a7fec7e 100644 --- a/.github/sync-translations.php +++ b/.github/sync-translations.php @@ -108,6 +108,8 @@ function mergeDom(\DOMDocument $dom, \DOMNode $tree, \DOMNode $input) if ($catalogue->defines($resname, $domain)) { $translation = $catalogue->get($resname, $domain); $metadata = $catalogue->getMetadata($resname, $domain); + } else { + $translation = $source; } $metadata['id'] = $enCatalogue->getMetadata($resname, $domain)['id']; if ($resname !== $source) { diff --git a/.github/workflows/integration-tests.yml b/.github/workflows/integration-tests.yml index 5511e08ad6407..c92a5ed03b762 100644 --- a/.github/workflows/integration-tests.yml +++ b/.github/workflows/integration-tests.yml @@ -114,6 +114,8 @@ jobs: steps: - name: Checkout uses: actions/checkout@v4 + with: + fetch-depth: 0 - name: Install system dependencies run: | @@ -201,13 +203,11 @@ jobs: - name: Check for changes in translation files id: changed-translation-files run: | - if git diff --quiet HEAD~1 HEAD -- 'src/**/Resources/translations/*.xlf'; then - echo "{changed}={true}" >> $GITHUB_OUTPUT - else - echo "{changed}={false}" >> $GITHUB_OUTPUT - fi + echo 'changed='$((git diff --quiet HEAD~1 HEAD -- 'src/**/Resources/translations/*.xlf' || (echo 'true' && exit 1)) && echo 'false') >> $GITHUB_OUTPUT - name: Check Translation Status if: steps.changed-translation-files.outputs.changed == 'true' run: | php src/Symfony/Component/Translation/Resources/bin/translation-status.php -v + php .github/sync-translations.php + git diff --exit-code src/ || (echo 'Run "php .github/sync-translations.php" to fix XLIFF files.' && exit 1) diff --git a/src/Symfony/Component/Translation/Resources/bin/translation-status.php b/src/Symfony/Component/Translation/Resources/bin/translation-status.php index 53e642c00dca7..1ab72c0006db3 100644 --- a/src/Symfony/Component/Translation/Resources/bin/translation-status.php +++ b/src/Symfony/Component/Translation/Resources/bin/translation-status.php @@ -166,11 +166,11 @@ function extractLocaleFromFilePath($filePath) function extractTranslationKeys($filePath) { $translationKeys = []; - $contents = new \SimpleXMLElement(file_get_contents($filePath)); + $contents = new SimpleXMLElement(file_get_contents($filePath)); foreach ($contents->file->body->{'trans-unit'} as $translationKey) { $translationId = (string) $translationKey['id']; - $translationKey = (string) $translationKey->source; + $translationKey = (string) ($translationKey['resname'] ?? $translationKey->source); $translationKeys[$translationId] = $translationKey; } diff --git a/src/Symfony/Component/Validator/Resources/translations/validators.af.xlf b/src/Symfony/Component/Validator/Resources/translations/validators.af.xlf index 387fb9a649711..64ce4f8c9ef8f 100644 --- a/src/Symfony/Component/Validator/Resources/translations/validators.af.xlf +++ b/src/Symfony/Component/Validator/Resources/translations/validators.af.xlf @@ -438,6 +438,10 @@ This value is not a valid MAC address. Hierdie waarde is nie 'n geldige MAC-adres nie. + + This URL does not contain a TLD. + Hierdie URL bevat nie 'n topvlakdomein (TLD) nie. + diff --git a/src/Symfony/Component/Validator/Resources/translations/validators.ar.xlf b/src/Symfony/Component/Validator/Resources/translations/validators.ar.xlf index dfd398ae95a4f..6d78ca77a217d 100644 --- a/src/Symfony/Component/Validator/Resources/translations/validators.ar.xlf +++ b/src/Symfony/Component/Validator/Resources/translations/validators.ar.xlf @@ -438,6 +438,10 @@ This value is not a valid MAC address. هذه القيمة ليست عنوان MAC صالحًا. + + This URL does not contain a TLD. + هذا الرابط لا يحتوي على نطاق أعلى مستوى (TLD). + diff --git a/src/Symfony/Component/Validator/Resources/translations/validators.az.xlf b/src/Symfony/Component/Validator/Resources/translations/validators.az.xlf index b6152e99dabc0..fbc8bb4a91aac 100644 --- a/src/Symfony/Component/Validator/Resources/translations/validators.az.xlf +++ b/src/Symfony/Component/Validator/Resources/translations/validators.az.xlf @@ -438,6 +438,10 @@ This value is not a valid MAC address. Bu dəyər etibarlı bir MAC ünvanı deyil. + + This URL does not contain a TLD. + Bu URL üst səviyyəli domen (TLD) içərmir. + diff --git a/src/Symfony/Component/Validator/Resources/translations/validators.be.xlf b/src/Symfony/Component/Validator/Resources/translations/validators.be.xlf index ea7001957572b..ee481c0bcc43e 100644 --- a/src/Symfony/Component/Validator/Resources/translations/validators.be.xlf +++ b/src/Symfony/Component/Validator/Resources/translations/validators.be.xlf @@ -438,6 +438,10 @@ This value is not a valid MAC address. Гэта значэнне не з'яўляецца сапраўдным MAC-адрасам. + + This URL does not contain a TLD. + Гэты URL не ўтрымлівае дамен верхняга ўзроўню (TLD). + diff --git a/src/Symfony/Component/Validator/Resources/translations/validators.bg.xlf b/src/Symfony/Component/Validator/Resources/translations/validators.bg.xlf index 5705364f80f84..8c840db411cb4 100644 --- a/src/Symfony/Component/Validator/Resources/translations/validators.bg.xlf +++ b/src/Symfony/Component/Validator/Resources/translations/validators.bg.xlf @@ -438,6 +438,10 @@ This value is not a valid MAC address. Тази стойност не е валиден MAC адрес. + + This URL does not contain a TLD. + Този URL адрес не съдържа домейн от най-високо ниво (TLD). + diff --git a/src/Symfony/Component/Validator/Resources/translations/validators.bs.xlf b/src/Symfony/Component/Validator/Resources/translations/validators.bs.xlf index bff1c8b441e2c..3ec56084f9c29 100644 --- a/src/Symfony/Component/Validator/Resources/translations/validators.bs.xlf +++ b/src/Symfony/Component/Validator/Resources/translations/validators.bs.xlf @@ -438,6 +438,10 @@ This value is not a valid MAC address. Ova vrijednost nije valjana MAC adresa. + + This URL does not contain a TLD. + Ovaj URL ne sadrži domenu najvišeg nivoa (TLD). + diff --git a/src/Symfony/Component/Validator/Resources/translations/validators.ca.xlf b/src/Symfony/Component/Validator/Resources/translations/validators.ca.xlf index 2f301e784ac03..f10451c7b2c6a 100644 --- a/src/Symfony/Component/Validator/Resources/translations/validators.ca.xlf +++ b/src/Symfony/Component/Validator/Resources/translations/validators.ca.xlf @@ -438,6 +438,10 @@ This value is not a valid MAC address. Aquest valor no és una adreça MAC vàlida. + + This URL does not contain a TLD. + Aquesta URL no conté un domini de nivell superior (TLD). + diff --git a/src/Symfony/Component/Validator/Resources/translations/validators.cs.xlf b/src/Symfony/Component/Validator/Resources/translations/validators.cs.xlf index 9ca83564ebadc..4904e2c4397d7 100644 --- a/src/Symfony/Component/Validator/Resources/translations/validators.cs.xlf +++ b/src/Symfony/Component/Validator/Resources/translations/validators.cs.xlf @@ -438,6 +438,10 @@ This value is not a valid MAC address. Tato hodnota není platnou MAC adresou. + + This URL does not contain a TLD. + Tato URL neobsahuje doménu nejvyššího řádu (TLD). + diff --git a/src/Symfony/Component/Validator/Resources/translations/validators.cy.xlf b/src/Symfony/Component/Validator/Resources/translations/validators.cy.xlf index fd984989e3597..748fc791d0ef6 100644 --- a/src/Symfony/Component/Validator/Resources/translations/validators.cy.xlf +++ b/src/Symfony/Component/Validator/Resources/translations/validators.cy.xlf @@ -438,6 +438,10 @@ This value is not a valid MAC address. Nid yw'r gwerth hwn yn gyfeiriad MAC dilys. + + This URL does not contain a TLD. + Nid yw'r URL hwn yn cynnwys parth lefel uchaf (TLD). + diff --git a/src/Symfony/Component/Validator/Resources/translations/validators.da.xlf b/src/Symfony/Component/Validator/Resources/translations/validators.da.xlf index 826ef10c955db..505edad652b66 100644 --- a/src/Symfony/Component/Validator/Resources/translations/validators.da.xlf +++ b/src/Symfony/Component/Validator/Resources/translations/validators.da.xlf @@ -438,6 +438,10 @@ This value is not a valid MAC address. Denne værdi er ikke en gyldig MAC-adresse. + + This URL does not contain a TLD. + Denne URL indeholder ikke et topdomæne (TLD). + diff --git a/src/Symfony/Component/Validator/Resources/translations/validators.el.xlf b/src/Symfony/Component/Validator/Resources/translations/validators.el.xlf index db927e1d51e65..8bca902b799d2 100644 --- a/src/Symfony/Component/Validator/Resources/translations/validators.el.xlf +++ b/src/Symfony/Component/Validator/Resources/translations/validators.el.xlf @@ -136,7 +136,7 @@ This value is not a valid IP address. - Αυτή η IP διεύθυνση δεν είναι έγκυρη. + Αυτή η IP διεύθυνση δεν είναι έγκυρη. This value is not a valid language. @@ -320,7 +320,7 @@ This value is not a valid UUID. - Αυτός ο αριθμός δεν είναι έγκυρη UUID. + Αυτός ο αριθμός δεν είναι έγκυρη UUID. This value should be a multiple of {{ compared_value }}. @@ -438,6 +438,10 @@ This value is not a valid MAC address. Αυτός ο αριθμός δεν είναι έγκυρη διεύθυνση MAC. + + This URL does not contain a TLD. + Αυτή η διεύθυνση URL δεν περιέχει έναν τομέα ανώτατου επιπέδου (TLD). + diff --git a/src/Symfony/Component/Validator/Resources/translations/validators.es.xlf b/src/Symfony/Component/Validator/Resources/translations/validators.es.xlf index abe75d5304ae3..52974ea52aa16 100644 --- a/src/Symfony/Component/Validator/Resources/translations/validators.es.xlf +++ b/src/Symfony/Component/Validator/Resources/translations/validators.es.xlf @@ -438,6 +438,10 @@ This value is not a valid MAC address. Este valor no es una dirección MAC válida. + + This URL does not contain a TLD. + Esta URL no contiene un dominio de nivel superior (TLD). + diff --git a/src/Symfony/Component/Validator/Resources/translations/validators.et.xlf b/src/Symfony/Component/Validator/Resources/translations/validators.et.xlf index 0af593467f591..bbacbb61391a2 100644 --- a/src/Symfony/Component/Validator/Resources/translations/validators.et.xlf +++ b/src/Symfony/Component/Validator/Resources/translations/validators.et.xlf @@ -438,6 +438,10 @@ This value is not a valid MAC address. See väärtus ei ole kehtiv MAC-aadress. + + This URL does not contain a TLD. + Sellel URL-il puudub ülataseme domeen (TLD). + diff --git a/src/Symfony/Component/Validator/Resources/translations/validators.eu.xlf b/src/Symfony/Component/Validator/Resources/translations/validators.eu.xlf index 6094d1cbca575..518539f929f36 100644 --- a/src/Symfony/Component/Validator/Resources/translations/validators.eu.xlf +++ b/src/Symfony/Component/Validator/Resources/translations/validators.eu.xlf @@ -438,6 +438,10 @@ This value is not a valid MAC address. Balio hau ez da MAC helbide baliozko bat. + + This URL does not contain a TLD. + URL honek ez du goi-mailako domeinurik (TLD) du. + diff --git a/src/Symfony/Component/Validator/Resources/translations/validators.fa.xlf b/src/Symfony/Component/Validator/Resources/translations/validators.fa.xlf index 1db553c9ffb18..8f91f142d062e 100644 --- a/src/Symfony/Component/Validator/Resources/translations/validators.fa.xlf +++ b/src/Symfony/Component/Validator/Resources/translations/validators.fa.xlf @@ -438,6 +438,10 @@ This value is not a valid MAC address. این مقدار یک آدرس MAC معتبر نیست. + + This URL does not contain a TLD. + این URL شامل دامنه سطح بالا (TLD) نمی‌شود. + diff --git a/src/Symfony/Component/Validator/Resources/translations/validators.fi.xlf b/src/Symfony/Component/Validator/Resources/translations/validators.fi.xlf index 324df2c276b79..38a53d511311f 100644 --- a/src/Symfony/Component/Validator/Resources/translations/validators.fi.xlf +++ b/src/Symfony/Component/Validator/Resources/translations/validators.fi.xlf @@ -438,6 +438,10 @@ This value is not a valid MAC address. Tämä arvo ei ole kelvollinen MAC-osoite. + + This URL does not contain a TLD. + Tämä URL-osoite ei sisällä ylätason verkkotunnusta (TLD). + diff --git a/src/Symfony/Component/Validator/Resources/translations/validators.fr.xlf b/src/Symfony/Component/Validator/Resources/translations/validators.fr.xlf index e2d747a49bffe..6194801874e7e 100644 --- a/src/Symfony/Component/Validator/Resources/translations/validators.fr.xlf +++ b/src/Symfony/Component/Validator/Resources/translations/validators.fr.xlf @@ -438,6 +438,10 @@ This value is not a valid MAC address. Cette valeur n'est pas une adresse MAC valide. + + This URL does not contain a TLD. + Cette URL ne contient pas de domaine de premier niveau (TLD). + diff --git a/src/Symfony/Component/Validator/Resources/translations/validators.gl.xlf b/src/Symfony/Component/Validator/Resources/translations/validators.gl.xlf index 2723983c5a99d..f097bd30858c8 100644 --- a/src/Symfony/Component/Validator/Resources/translations/validators.gl.xlf +++ b/src/Symfony/Component/Validator/Resources/translations/validators.gl.xlf @@ -438,6 +438,10 @@ This value is not a valid MAC address. Este valor non é un enderezo MAC válido. + + This URL does not contain a TLD. + Esta URL non contén un dominio de nivel superior (TLD). + diff --git a/src/Symfony/Component/Validator/Resources/translations/validators.he.xlf b/src/Symfony/Component/Validator/Resources/translations/validators.he.xlf index b1bb894a7fe4b..2f506d39105cc 100644 --- a/src/Symfony/Component/Validator/Resources/translations/validators.he.xlf +++ b/src/Symfony/Component/Validator/Resources/translations/validators.he.xlf @@ -438,6 +438,10 @@ This value is not a valid MAC address. ערך זה אינו כתובת MAC תקפה. + + This URL does not contain a TLD. + כתובת URL זו אינה מכילה דומיין רמה עליונה (TLD). + diff --git a/src/Symfony/Component/Validator/Resources/translations/validators.hr.xlf b/src/Symfony/Component/Validator/Resources/translations/validators.hr.xlf index eed237ce27e40..43cb98ce55c6f 100644 --- a/src/Symfony/Component/Validator/Resources/translations/validators.hr.xlf +++ b/src/Symfony/Component/Validator/Resources/translations/validators.hr.xlf @@ -438,6 +438,10 @@ This value is not a valid MAC address. Ova vrijednost nije valjana MAC adresa. + + This URL does not contain a TLD. + Ovaj URL ne sadrži najvišu razinu domene (TLD). + diff --git a/src/Symfony/Component/Validator/Resources/translations/validators.hu.xlf b/src/Symfony/Component/Validator/Resources/translations/validators.hu.xlf index df39afd709671..308594d9fb405 100644 --- a/src/Symfony/Component/Validator/Resources/translations/validators.hu.xlf +++ b/src/Symfony/Component/Validator/Resources/translations/validators.hu.xlf @@ -438,6 +438,10 @@ This value is not a valid MAC address. Ez az érték nem érvényes MAC-cím. + + This URL does not contain a TLD. + Ez az URL nem tartalmaz felső szintű domain-t (TLD). + diff --git a/src/Symfony/Component/Validator/Resources/translations/validators.hy.xlf b/src/Symfony/Component/Validator/Resources/translations/validators.hy.xlf index 707301d18c037..0dc7b52f8a802 100644 --- a/src/Symfony/Component/Validator/Resources/translations/validators.hy.xlf +++ b/src/Symfony/Component/Validator/Resources/translations/validators.hy.xlf @@ -438,6 +438,10 @@ This value is not a valid MAC address. Այս արժեքը վավեր MAC հասցե չէ։ + + This URL does not contain a TLD. + Այս URL-ը չունի վերին մակարդակի դոմեյն (TLD). + diff --git a/src/Symfony/Component/Validator/Resources/translations/validators.id.xlf b/src/Symfony/Component/Validator/Resources/translations/validators.id.xlf index 1cc60c4d8f9a2..c6161aa4147e8 100644 --- a/src/Symfony/Component/Validator/Resources/translations/validators.id.xlf +++ b/src/Symfony/Component/Validator/Resources/translations/validators.id.xlf @@ -438,6 +438,10 @@ This value is not a valid MAC address. Nilai ini bukan alamat MAC yang valid. + + This URL does not contain a TLD. + URL ini tidak mengandung domain tingkat atas (TLD). + diff --git a/src/Symfony/Component/Validator/Resources/translations/validators.it.xlf b/src/Symfony/Component/Validator/Resources/translations/validators.it.xlf index bd7b25882d82c..4b5ca7a7064a0 100644 --- a/src/Symfony/Component/Validator/Resources/translations/validators.it.xlf +++ b/src/Symfony/Component/Validator/Resources/translations/validators.it.xlf @@ -438,6 +438,10 @@ This value is not a valid MAC address. Questo valore non è un indirizzo MAC valido. + + This URL does not contain a TLD. + Questo URL non contiene un dominio di primo livello (TLD). + diff --git a/src/Symfony/Component/Validator/Resources/translations/validators.ja.xlf b/src/Symfony/Component/Validator/Resources/translations/validators.ja.xlf index 0524cd0511e15..25009e129f081 100644 --- a/src/Symfony/Component/Validator/Resources/translations/validators.ja.xlf +++ b/src/Symfony/Component/Validator/Resources/translations/validators.ja.xlf @@ -438,6 +438,10 @@ This value is not a valid MAC address. この値は有効なMACアドレスではありません。 + + This URL does not contain a TLD. + このURLにはトップレベルドメイン(TLD)が含まれていません。 + diff --git a/src/Symfony/Component/Validator/Resources/translations/validators.lb.xlf b/src/Symfony/Component/Validator/Resources/translations/validators.lb.xlf index 548d82da41683..20f5dc679e285 100644 --- a/src/Symfony/Component/Validator/Resources/translations/validators.lb.xlf +++ b/src/Symfony/Component/Validator/Resources/translations/validators.lb.xlf @@ -438,6 +438,10 @@ This value is not a valid MAC address. Dëse Wäert ass keng gülteg MAC-Adress. + + This URL does not contain a TLD. + Dësen URL enthält keng Top-Level-Domain (TLD). + diff --git a/src/Symfony/Component/Validator/Resources/translations/validators.lt.xlf b/src/Symfony/Component/Validator/Resources/translations/validators.lt.xlf index b3ee199fe4c73..61ba74fb63c5e 100644 --- a/src/Symfony/Component/Validator/Resources/translations/validators.lt.xlf +++ b/src/Symfony/Component/Validator/Resources/translations/validators.lt.xlf @@ -438,6 +438,10 @@ This value is not a valid MAC address. Ši vertė nėra galiojantis MAC adresas. + + This URL does not contain a TLD. + Šis URL neturi aukščiausio lygio domeno (TLD). + diff --git a/src/Symfony/Component/Validator/Resources/translations/validators.mk.xlf b/src/Symfony/Component/Validator/Resources/translations/validators.mk.xlf index 9d6dec6288b8a..31f164eee64c7 100644 --- a/src/Symfony/Component/Validator/Resources/translations/validators.mk.xlf +++ b/src/Symfony/Component/Validator/Resources/translations/validators.mk.xlf @@ -438,6 +438,10 @@ This value is not a valid MAC address. Оваа вредност не е валидна MAC адреса. + + This URL does not contain a TLD. + Овој URL не содржи домен од највисоко ниво (TLD). + diff --git a/src/Symfony/Component/Validator/Resources/translations/validators.mn.xlf b/src/Symfony/Component/Validator/Resources/translations/validators.mn.xlf index 4984bb127cab1..e284b5db7e214 100644 --- a/src/Symfony/Component/Validator/Resources/translations/validators.mn.xlf +++ b/src/Symfony/Component/Validator/Resources/translations/validators.mn.xlf @@ -438,6 +438,10 @@ This value is not a valid MAC address. Энэ утга хүчинтэй MAC хаяг биш юм. + + This URL does not contain a TLD. + Энэ URL нь дээд түвшингийн домейн (TLD)-гүй байна. + diff --git a/src/Symfony/Component/Validator/Resources/translations/validators.my.xlf b/src/Symfony/Component/Validator/Resources/translations/validators.my.xlf index e4858336c1c7d..58f1ff48d1f1b 100644 --- a/src/Symfony/Component/Validator/Resources/translations/validators.my.xlf +++ b/src/Symfony/Component/Validator/Resources/translations/validators.my.xlf @@ -438,6 +438,10 @@ This value is not a valid MAC address. ဤတန်ဖိုးသည် မှန်ကန်သော MAC လိပ်စာ မဟုတ်ပါ။ + + This URL does not contain a TLD. + ဤ URL သည် အမြင့်ဆုံးအဆင့်ဒိုမိန်း (TLD) မပါရှိပါ။ + diff --git a/src/Symfony/Component/Validator/Resources/translations/validators.nb.xlf b/src/Symfony/Component/Validator/Resources/translations/validators.nb.xlf index 8b317449ef4e8..0b4c3becb15e6 100644 --- a/src/Symfony/Component/Validator/Resources/translations/validators.nb.xlf +++ b/src/Symfony/Component/Validator/Resources/translations/validators.nb.xlf @@ -438,6 +438,10 @@ This value is not a valid MAC address. Denne verdien er ikke en gyldig MAC-adresse. + + This URL does not contain a TLD. + Denne URL-en inneholder ikke et toppnivådomene (TLD). + diff --git a/src/Symfony/Component/Validator/Resources/translations/validators.nl.xlf b/src/Symfony/Component/Validator/Resources/translations/validators.nl.xlf index 81d57cab48eec..f774d6f6fc4f9 100644 --- a/src/Symfony/Component/Validator/Resources/translations/validators.nl.xlf +++ b/src/Symfony/Component/Validator/Resources/translations/validators.nl.xlf @@ -438,6 +438,10 @@ This value is not a valid MAC address. Deze waarde is geen geldig MAC-adres. + + This URL does not contain a TLD. + Deze URL bevat geen top-level domein (TLD). + diff --git a/src/Symfony/Component/Validator/Resources/translations/validators.nn.xlf b/src/Symfony/Component/Validator/Resources/translations/validators.nn.xlf index 4e1a41dab84d7..9f2e950fda9af 100644 --- a/src/Symfony/Component/Validator/Resources/translations/validators.nn.xlf +++ b/src/Symfony/Component/Validator/Resources/translations/validators.nn.xlf @@ -438,6 +438,10 @@ This value is not a valid MAC address. Denne verdien er ikkje ein gyldig MAC-adresse. + + This URL does not contain a TLD. + Denne URL-en inneheld ikkje eit toppnivådomene (TLD). + diff --git a/src/Symfony/Component/Validator/Resources/translations/validators.no.xlf b/src/Symfony/Component/Validator/Resources/translations/validators.no.xlf index 8b317449ef4e8..0b4c3becb15e6 100644 --- a/src/Symfony/Component/Validator/Resources/translations/validators.no.xlf +++ b/src/Symfony/Component/Validator/Resources/translations/validators.no.xlf @@ -438,6 +438,10 @@ This value is not a valid MAC address. Denne verdien er ikke en gyldig MAC-adresse. + + This URL does not contain a TLD. + Denne URL-en inneholder ikke et toppnivådomene (TLD). + diff --git a/src/Symfony/Component/Validator/Resources/translations/validators.pt.xlf b/src/Symfony/Component/Validator/Resources/translations/validators.pt.xlf index 5861a6d1434c6..ffd79f80aca69 100644 --- a/src/Symfony/Component/Validator/Resources/translations/validators.pt.xlf +++ b/src/Symfony/Component/Validator/Resources/translations/validators.pt.xlf @@ -438,6 +438,10 @@ This value is not a valid MAC address. Este valor não é um endereço MAC válido. + + This URL does not contain a TLD. + Esta URL não contém um domínio de topo (TLD). + diff --git a/src/Symfony/Component/Validator/Resources/translations/validators.pt_BR.xlf b/src/Symfony/Component/Validator/Resources/translations/validators.pt_BR.xlf index 4372885085282..d0b10db08b525 100644 --- a/src/Symfony/Component/Validator/Resources/translations/validators.pt_BR.xlf +++ b/src/Symfony/Component/Validator/Resources/translations/validators.pt_BR.xlf @@ -438,6 +438,10 @@ This value is not a valid MAC address. Este valor não é um endereço MAC válido. + + This URL does not contain a TLD. + Esta URL não contém um domínio de topo (TLD). + diff --git a/src/Symfony/Component/Validator/Resources/translations/validators.ro.xlf b/src/Symfony/Component/Validator/Resources/translations/validators.ro.xlf index 426f6319cee20..0a785c6534786 100644 --- a/src/Symfony/Component/Validator/Resources/translations/validators.ro.xlf +++ b/src/Symfony/Component/Validator/Resources/translations/validators.ro.xlf @@ -438,6 +438,10 @@ This value is not a valid MAC address. Această valoare nu este o adresă MAC validă. + + This URL does not contain a TLD. + Acest URL nu conține un domeniu de nivel superior (TLD). + diff --git a/src/Symfony/Component/Validator/Resources/translations/validators.ru.xlf b/src/Symfony/Component/Validator/Resources/translations/validators.ru.xlf index 22900d5c266b5..d6628053e575e 100644 --- a/src/Symfony/Component/Validator/Resources/translations/validators.ru.xlf +++ b/src/Symfony/Component/Validator/Resources/translations/validators.ru.xlf @@ -438,6 +438,10 @@ This value is not a valid MAC address. Это значение не является действительным MAC-адресом. + + This URL does not contain a TLD. + Этот URL не содержит домен верхнего уровня (TLD). + diff --git a/src/Symfony/Component/Validator/Resources/translations/validators.sk.xlf b/src/Symfony/Component/Validator/Resources/translations/validators.sk.xlf index 9b06bdfb8c12e..bb9602ff5335f 100644 --- a/src/Symfony/Component/Validator/Resources/translations/validators.sk.xlf +++ b/src/Symfony/Component/Validator/Resources/translations/validators.sk.xlf @@ -438,6 +438,10 @@ This value is not a valid MAC address. Táto hodnota nie je platnou MAC adresou. + + This URL does not contain a TLD. + Táto URL neobsahuje doménu najvyššej úrovne (TLD). + diff --git a/src/Symfony/Component/Validator/Resources/translations/validators.sl.xlf b/src/Symfony/Component/Validator/Resources/translations/validators.sl.xlf index 596a66166cf4d..d5a4e01c30443 100644 --- a/src/Symfony/Component/Validator/Resources/translations/validators.sl.xlf +++ b/src/Symfony/Component/Validator/Resources/translations/validators.sl.xlf @@ -438,6 +438,10 @@ This value is not a valid MAC address. Ta vrednost ni veljaven MAC naslov. + + This URL does not contain a TLD. + Ta URL ne vsebuje domene najvišje ravni (TLD). + diff --git a/src/Symfony/Component/Validator/Resources/translations/validators.sq.xlf b/src/Symfony/Component/Validator/Resources/translations/validators.sq.xlf index 3ac3603144ca2..822260dbd3528 100644 --- a/src/Symfony/Component/Validator/Resources/translations/validators.sq.xlf +++ b/src/Symfony/Component/Validator/Resources/translations/validators.sq.xlf @@ -447,6 +447,10 @@ This value is not a valid MAC address. Kjo nuk është një adresë e vlefshme e Kontrollit të Qasjes në Media (MAC). + + This URL does not contain a TLD. + Ky URL nuk përmban një domain nivelin më të lartë (TLD). + diff --git a/src/Symfony/Component/Validator/Resources/translations/validators.sr_Cyrl.xlf b/src/Symfony/Component/Validator/Resources/translations/validators.sr_Cyrl.xlf index b73cde9bac4a9..0b588a47dd82c 100644 --- a/src/Symfony/Component/Validator/Resources/translations/validators.sr_Cyrl.xlf +++ b/src/Symfony/Component/Validator/Resources/translations/validators.sr_Cyrl.xlf @@ -438,6 +438,10 @@ This value is not a valid MAC address. Ова вредност није валидна MAC адреса. + + This URL does not contain a TLD. + Овај URL не садржи домен највишег нивоа (TLD). + diff --git a/src/Symfony/Component/Validator/Resources/translations/validators.sr_Latn.xlf b/src/Symfony/Component/Validator/Resources/translations/validators.sr_Latn.xlf index cd4ccfb3f3c03..8d36355d82922 100644 --- a/src/Symfony/Component/Validator/Resources/translations/validators.sr_Latn.xlf +++ b/src/Symfony/Component/Validator/Resources/translations/validators.sr_Latn.xlf @@ -438,6 +438,10 @@ This value is not a valid MAC address. Ova vrednost nije validna MAC adresa. + + This URL does not contain a TLD. + Ovaj URL ne sadrži domen najvišeg nivoa (TLD). + diff --git a/src/Symfony/Component/Validator/Resources/translations/validators.sv.xlf b/src/Symfony/Component/Validator/Resources/translations/validators.sv.xlf index ec106fa78ebb7..bb20273d3fcb0 100644 --- a/src/Symfony/Component/Validator/Resources/translations/validators.sv.xlf +++ b/src/Symfony/Component/Validator/Resources/translations/validators.sv.xlf @@ -438,6 +438,10 @@ This value is not a valid MAC address. Värdet är inte en giltig MAC-adress. + + This URL does not contain a TLD. + Denna URL innehåller inte ett toppdomän (TLD). + diff --git a/src/Symfony/Component/Validator/Resources/translations/validators.th.xlf b/src/Symfony/Component/Validator/Resources/translations/validators.th.xlf index f109024bfeaf3..d3562dc28f889 100644 --- a/src/Symfony/Component/Validator/Resources/translations/validators.th.xlf +++ b/src/Symfony/Component/Validator/Resources/translations/validators.th.xlf @@ -438,6 +438,10 @@ This value is not a valid MAC address. ค่านี้ไม่ใช่ที่อยู่ MAC ที่ถูกต้อง + + This URL does not contain a TLD. + URL นี้ไม่มีโดเมนระดับสูงสุด (TLD) อยู่. + diff --git a/src/Symfony/Component/Validator/Resources/translations/validators.tl.xlf b/src/Symfony/Component/Validator/Resources/translations/validators.tl.xlf index 632efbc3f3f95..9fcc43451a2e5 100644 --- a/src/Symfony/Component/Validator/Resources/translations/validators.tl.xlf +++ b/src/Symfony/Component/Validator/Resources/translations/validators.tl.xlf @@ -438,6 +438,10 @@ This value is not a valid MAC address. Ang halagang ito ay hindi isang wastong MAC address. + + This URL does not contain a TLD. + Ang URL na ito ay walang top-level domain (TLD). + diff --git a/src/Symfony/Component/Validator/Resources/translations/validators.tr.xlf b/src/Symfony/Component/Validator/Resources/translations/validators.tr.xlf index 4d66ce8bcbc58..69ff5b41fe1fa 100644 --- a/src/Symfony/Component/Validator/Resources/translations/validators.tr.xlf +++ b/src/Symfony/Component/Validator/Resources/translations/validators.tr.xlf @@ -438,6 +438,10 @@ This value is not a valid MAC address. Bu değer geçerli bir MAC adresi değil. + + This URL does not contain a TLD. + Bu URL bir üst düzey alan adı (TLD) içermiyor. + diff --git a/src/Symfony/Component/Validator/Resources/translations/validators.uk.xlf b/src/Symfony/Component/Validator/Resources/translations/validators.uk.xlf index fcf63e0f675f3..923c03ed0081d 100644 --- a/src/Symfony/Component/Validator/Resources/translations/validators.uk.xlf +++ b/src/Symfony/Component/Validator/Resources/translations/validators.uk.xlf @@ -438,6 +438,10 @@ This value is not a valid MAC address. Це значення не є дійсною MAC-адресою. + + This URL does not contain a TLD. + Цей URL не містить домен верхнього рівня (TLD). + diff --git a/src/Symfony/Component/Validator/Resources/translations/validators.ur.xlf b/src/Symfony/Component/Validator/Resources/translations/validators.ur.xlf index 65719c64ebc4a..63bbaf3c40146 100644 --- a/src/Symfony/Component/Validator/Resources/translations/validators.ur.xlf +++ b/src/Symfony/Component/Validator/Resources/translations/validators.ur.xlf @@ -438,6 +438,10 @@ This value is not a valid MAC address. یہ قیمت کوئی درست MAC پتہ نہیں ہے۔ + + This URL does not contain a TLD. + یہ URL اوپری سطح کے ڈومین (TLD) کو شامل نہیں کرتا۔ + diff --git a/src/Symfony/Component/Validator/Resources/translations/validators.uz.xlf b/src/Symfony/Component/Validator/Resources/translations/validators.uz.xlf index bf5a2d5f4d9de..9884cfea2996c 100644 --- a/src/Symfony/Component/Validator/Resources/translations/validators.uz.xlf +++ b/src/Symfony/Component/Validator/Resources/translations/validators.uz.xlf @@ -438,6 +438,10 @@ This value is not a valid MAC address. Bu qiymat haqiqiy MAC manzil emas. + + This URL does not contain a TLD. + Bu URL yuqori darajali domen (TLD)ni o'z ichiga olmaydi. + diff --git a/src/Symfony/Component/Validator/Resources/translations/validators.vi.xlf b/src/Symfony/Component/Validator/Resources/translations/validators.vi.xlf index eadf61467c8bc..01202c414dc8f 100644 --- a/src/Symfony/Component/Validator/Resources/translations/validators.vi.xlf +++ b/src/Symfony/Component/Validator/Resources/translations/validators.vi.xlf @@ -438,6 +438,10 @@ This value is not a valid MAC address. Giá trị này không phải là địa chỉ MAC hợp lệ. + + This URL does not contain a TLD. + URL này không chứa tên miền cấp cao (TLD). + diff --git a/src/Symfony/Component/Validator/Resources/translations/validators.zh_CN.xlf b/src/Symfony/Component/Validator/Resources/translations/validators.zh_CN.xlf index 155871cd38df4..6380d0a83faee 100644 --- a/src/Symfony/Component/Validator/Resources/translations/validators.zh_CN.xlf +++ b/src/Symfony/Component/Validator/Resources/translations/validators.zh_CN.xlf @@ -438,6 +438,10 @@ This value is not a valid MAC address. 该值不是有效的MAC地址。 + + This URL does not contain a TLD. + 此URL不包含顶级域名(TLD)。 + diff --git a/src/Symfony/Component/Validator/Resources/translations/validators.zh_TW.xlf b/src/Symfony/Component/Validator/Resources/translations/validators.zh_TW.xlf index 1a90678627e97..e4e32f7761545 100644 --- a/src/Symfony/Component/Validator/Resources/translations/validators.zh_TW.xlf +++ b/src/Symfony/Component/Validator/Resources/translations/validators.zh_TW.xlf @@ -438,6 +438,10 @@ This value is not a valid MAC address. 這不是一個有效的MAC地址。 + + This URL does not contain a TLD. + 此URL不含頂級域名(TLD)。 + From 38d71d692c29fcd3094c7085709587e8e49e1c6a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Simon=20Andr=C3=A9?= Date: Thu, 11 Apr 2024 01:22:32 +0200 Subject: [PATCH 21/65] [HttpKernel] Ensure controllers are not lazy Fix #54542 --- .../RegisterControllerArgumentLocatorsPass.php | 1 + ...egisterControllerArgumentLocatorsPassTest.php | 16 ++++++++++++++++ 2 files changed, 17 insertions(+) diff --git a/src/Symfony/Component/HttpKernel/DependencyInjection/RegisterControllerArgumentLocatorsPass.php b/src/Symfony/Component/HttpKernel/DependencyInjection/RegisterControllerArgumentLocatorsPass.php index 3dbaff564194b..0bdba44b0e299 100644 --- a/src/Symfony/Component/HttpKernel/DependencyInjection/RegisterControllerArgumentLocatorsPass.php +++ b/src/Symfony/Component/HttpKernel/DependencyInjection/RegisterControllerArgumentLocatorsPass.php @@ -70,6 +70,7 @@ public function process(ContainerBuilder $container) foreach ($container->findTaggedServiceIds($this->controllerTag, true) as $id => $tags) { $def = $container->getDefinition($id); $def->setPublic(true); + $def->setLazy(false); $class = $def->getClass(); $autowire = $def->isAutowired(); $bindings = $def->getBindings(); diff --git a/src/Symfony/Component/HttpKernel/Tests/DependencyInjection/RegisterControllerArgumentLocatorsPassTest.php b/src/Symfony/Component/HttpKernel/Tests/DependencyInjection/RegisterControllerArgumentLocatorsPassTest.php index 3dec2e912af71..40e6ea0748fc3 100644 --- a/src/Symfony/Component/HttpKernel/Tests/DependencyInjection/RegisterControllerArgumentLocatorsPassTest.php +++ b/src/Symfony/Component/HttpKernel/Tests/DependencyInjection/RegisterControllerArgumentLocatorsPassTest.php @@ -25,6 +25,7 @@ use Symfony\Component\DependencyInjection\TypedReference; use Symfony\Component\HttpFoundation\Response; use Symfony\Component\HttpKernel\DependencyInjection\RegisterControllerArgumentLocatorsPass; +use Symfony\Component\HttpKernel\Tests\Fixtures\DataCollector\DummyController; use Symfony\Component\HttpKernel\Tests\Fixtures\Suit; class RegisterControllerArgumentLocatorsPassTest extends TestCase @@ -285,6 +286,21 @@ public function testControllersAreMadePublic() $this->assertTrue($container->getDefinition('foo')->isPublic()); } + public function testControllersAreMadeNonLazy() + { + $container = new ContainerBuilder(); + $container->register('argument_resolver.service')->addArgument([]); + + $container->register('foo', DummyController::class) + ->addTag('controller.service_arguments') + ->setLazy(true); + + $pass = new RegisterControllerArgumentLocatorsPass(); + $pass->process($container); + + $this->assertFalse($container->getDefinition('foo')->isLazy()); + } + /** * @dataProvider provideBindings */ From 155d23f9c9a54089935b9eb024740bc38a71660e Mon Sep 17 00:00:00 2001 From: Nicolas Grekas Date: Thu, 11 Apr 2024 09:20:16 +0200 Subject: [PATCH 22/65] [Translation] Skip state=needs-translation entries only when source == target --- .../Component/Translation/Loader/XliffFileLoader.php | 12 ++++++++---- .../Translation/Tests/Loader/XliffFileLoaderTest.php | 11 ++++++++++- 2 files changed, 18 insertions(+), 5 deletions(-) diff --git a/src/Symfony/Component/Translation/Loader/XliffFileLoader.php b/src/Symfony/Component/Translation/Loader/XliffFileLoader.php index fae07dbe3d958..f4d2396191fac 100644 --- a/src/Symfony/Component/Translation/Loader/XliffFileLoader.php +++ b/src/Symfony/Component/Translation/Loader/XliffFileLoader.php @@ -111,16 +111,20 @@ private function extractXliff1(\DOMDocument $dom, MessageCatalogue $catalogue, s continue; } - if (isset($translation->target) && 'needs-translation' === (string) $translation->target->attributes()['state']) { + $source = (string) (isset($attributes['resname']) && $attributes['resname'] ? $attributes['resname'] : $translation->source); + + if (isset($translation->target) + && 'needs-translation' === (string) $translation->target->attributes()['state'] + && \in_array((string) $translation->target, [$source, (string) $translation->source], true) + ) { continue; } - $source = isset($attributes['resname']) && $attributes['resname'] ? $attributes['resname'] : $translation->source; // If the xlf file has another encoding specified, try to convert it because // simple_xml will always return utf-8 encoded values $target = $this->utf8ToCharset((string) ($translation->target ?? $translation->source), $encoding); - $catalogue->set((string) $source, $target, $domain); + $catalogue->set($source, $target, $domain); $metadata = [ 'source' => (string) $translation->source, @@ -143,7 +147,7 @@ private function extractXliff1(\DOMDocument $dom, MessageCatalogue $catalogue, s $metadata['id'] = (string) $attributes['id']; } - $catalogue->setMetadata((string) $source, $metadata, $domain); + $catalogue->setMetadata($source, $metadata, $domain); } } } diff --git a/src/Symfony/Component/Translation/Tests/Loader/XliffFileLoaderTest.php b/src/Symfony/Component/Translation/Tests/Loader/XliffFileLoaderTest.php index 5013d2713b181..99fa9249d7500 100644 --- a/src/Symfony/Component/Translation/Tests/Loader/XliffFileLoaderTest.php +++ b/src/Symfony/Component/Translation/Tests/Loader/XliffFileLoaderTest.php @@ -52,9 +52,17 @@ public function testLoadRawXliff() test - with + with note + + baz + baz + + + baz + buz + @@ -65,6 +73,7 @@ public function testLoadRawXliff() $this->assertEquals('en', $catalogue->getLocale()); $this->assertSame([], libxml_get_errors()); $this->assertContainsOnly('string', $catalogue->all('domain1')); + $this->assertSame(['foo', 'extra', 'key', 'test'], array_keys($catalogue->all('domain1'))); } public function testLoadWithInternalErrorsEnabled() From 6b9eb16011ac9d1918595819557b9c87bceab655 Mon Sep 17 00:00:00 2001 From: Bob van de Vijver Date: Thu, 11 Apr 2024 12:45:31 +0200 Subject: [PATCH 23/65] Improve dutch translations --- .../Resources/translations/validators.nl.xlf | 30 +++++++++---------- 1 file changed, 15 insertions(+), 15 deletions(-) diff --git a/src/Symfony/Component/Validator/Resources/translations/validators.nl.xlf b/src/Symfony/Component/Validator/Resources/translations/validators.nl.xlf index f774d6f6fc4f9..3d445b302c718 100644 --- a/src/Symfony/Component/Validator/Resources/translations/validators.nl.xlf +++ b/src/Symfony/Component/Validator/Resources/translations/validators.nl.xlf @@ -64,11 +64,11 @@ The file is too large ({{ size }} {{ suffix }}). Allowed maximum size is {{ limit }} {{ suffix }}. - Het bestand is te groot ({{ size }} {{ suffix }}). Toegestane maximum grootte is {{ limit }} {{ suffix }}. + Het bestand is te groot ({{ size }} {{ suffix }}). De maximale grootte is {{ limit }} {{ suffix }}. The mime type of the file is invalid ({{ type }}). Allowed mime types are {{ types }}. - Het mime type van het bestand is ongeldig ({{ type }}). Toegestane mime types zijn {{ types }}. + Het mediatype van het bestand is ongeldig ({{ type }}). De toegestane mediatypes zijn {{ types }}. This value should be {{ limit }} or less. @@ -116,7 +116,7 @@ The file is too large. Allowed maximum size is {{ limit }} {{ suffix }}. - Het bestand is te groot. Toegestane maximum grootte is {{ limit }} {{ suffix }}. + Het bestand is te groot. De maximale grootte is {{ limit }} {{ suffix }}. The file is too large. @@ -144,7 +144,7 @@ This value is not a valid locale. - Deze waarde is geen geldige locale. + Deze waarde is geen geldige landinstelling. This value is not a valid country. @@ -160,7 +160,7 @@ The image width is too big ({{ width }}px). Allowed maximum width is {{ max_width }}px. - De afbeelding is te breed ({{ width }}px). De maximaal toegestane breedte is {{ max_width }}px. + De afbeelding is te breed ({{ width }}px). De maximaal breedte is {{ max_width }}px. The image width is too small ({{ width }}px). Minimum width expected is {{ min_width }}px. @@ -168,7 +168,7 @@ The image height is too big ({{ height }}px). Allowed maximum height is {{ max_height }}px. - De afbeelding is te hoog ({{ height }}px). De maximaal toegestane hoogte is {{ max_height }}px. + De afbeelding is te hoog ({{ height }}px). De maximaal hoogte is {{ max_height }}px. The image height is too small ({{ height }}px). Minimum height expected is {{ min_height }}px. @@ -280,11 +280,11 @@ The image ratio is too big ({{ ratio }}). Allowed maximum ratio is {{ max_ratio }}. - De afbeeldingsverhouding is te groot ({{ ratio }}). Maximale verhouding is {{ max_ratio }}. + De afbeeldingsverhouding is te groot ({{ ratio }}). De maximale verhouding is {{ max_ratio }}. The image ratio is too small ({{ ratio }}). Minimum ratio expected is {{ min_ratio }}. - De afbeeldingsverhouding is te klein ({{ ratio }}). Minimale verhouding is {{ min_ratio }}. + De afbeeldingsverhouding is te klein ({{ ratio }}). De minimale verhouding is {{ min_ratio }}. The image is square ({{ width }}x{{ height }}px). Square images are not allowed. @@ -324,7 +324,7 @@ This value should be a multiple of {{ compared_value }}. - Deze waarde zou een meervoud van {{ compared_value }} moeten zijn. + Deze waarde moet een meervoud van {{ compared_value }} zijn. This Business Identifier Code (BIC) is not associated with IBAN {{ iban }}. @@ -336,7 +336,7 @@ This collection should contain only unique elements. - Deze collectie moet alleen unieke elementen bevatten. + Deze collectie mag alleen unieke elementen bevatten. This value should be positive. @@ -396,7 +396,7 @@ This value is not a valid CIDR notation. - Deze waarde is geen geldige CIDR notatie. + Deze waarde is geen geldige CIDR-notatie. The value of the netmask should be between {{ min }} and {{ max }}. @@ -404,11 +404,11 @@ The filename is too long. It should have {{ filename_max_length }} character or less.|The filename is too long. It should have {{ filename_max_length }} characters or less. - De bestandsnaam is te lang. Het moet {{ filename_max_length }} karakter of minder zijn. + De bestandsnaam is te lang. Het moet {{ filename_max_length }} karakter of minder zijn.|De bestandsnaam is te lang. Het moet {{ filename_max_length }} karakters of minder zijn. The password strength is too low. Please use a stronger password. - De wachtwoordsterkte is te laag. Gebruik alstublieft een sterker wachtwoord. + Het wachtwoord is niet sterk genoeg. Probeer een sterker wachtwoord. This value contains characters that are not allowed by the current restriction-level. @@ -428,11 +428,11 @@ The extension of the file is invalid ({{ extension }}). Allowed extensions are {{ extensions }}. - De extensie van het bestand is ongeldig ({{ extension }}). Toegestane extensies zijn {{ extensions }}. + De bestandsextensie is ongeldig ({{ extension }}). De toegestane extensies zijn {{ extensions }}. The detected character encoding is invalid ({{ detected }}). Allowed encodings are {{ encodings }}. - De gedetecteerde karaktercodering is ongeldig ({{ detected }}). Toegestane coderingen zijn {{ encodings }}. + De gedetecteerde karaktercodering is ongeldig ({{ detected }}). De toegestane coderingen zijn {{ encodings }}. This value is not a valid MAC address. From df8f0cf19cb59fd9c190f9626d8b75cf29e96dd6 Mon Sep 17 00:00:00 2001 From: CarolienBEER <115483924+CarolienBEER@users.noreply.github.com> Date: Thu, 11 Apr 2024 11:27:27 +0200 Subject: [PATCH 24/65] [validator] validated Dutch translation --- .../Validator/Resources/translations/validators.nl.xlf | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Symfony/Component/Validator/Resources/translations/validators.nl.xlf b/src/Symfony/Component/Validator/Resources/translations/validators.nl.xlf index f774d6f6fc4f9..efdf1fb3c224c 100644 --- a/src/Symfony/Component/Validator/Resources/translations/validators.nl.xlf +++ b/src/Symfony/Component/Validator/Resources/translations/validators.nl.xlf @@ -440,7 +440,7 @@ This URL does not contain a TLD. - Deze URL bevat geen top-level domein (TLD). + Deze URL bevat geen topleveldomein (TLD). From b501bba60594b9286bafcc9fdb11f69b3ec6cad6 Mon Sep 17 00:00:00 2001 From: Stephan Vock Date: Mon, 26 Feb 2024 10:53:07 +0000 Subject: [PATCH 25/65] [Security] Validate that CSRF token in form login is string similar to username/password --- .../Authenticator/FormLoginAuthenticator.php | 4 ++ .../FormLoginAuthenticatorTest.php | 48 +++++++++++++++++++ 2 files changed, 52 insertions(+) diff --git a/src/Symfony/Component/Security/Http/Authenticator/FormLoginAuthenticator.php b/src/Symfony/Component/Security/Http/Authenticator/FormLoginAuthenticator.php index 3279067f50f7a..5b4de2b454d69 100644 --- a/src/Symfony/Component/Security/Http/Authenticator/FormLoginAuthenticator.php +++ b/src/Symfony/Component/Security/Http/Authenticator/FormLoginAuthenticator.php @@ -161,6 +161,10 @@ private function getCredentials(Request $request): array throw new BadRequestHttpException(sprintf('The key "%s" must be a string, "%s" given.', $this->options['password_parameter'], \gettype($credentials['password']))); } + if (!\is_string($credentials['csrf_token'] ?? '') && (!\is_object($credentials['csrf_token']) || !method_exists($credentials['csrf_token'], '__toString'))) { + throw new BadRequestHttpException(sprintf('The key "%s" must be a string, "%s" given.', $this->options['csrf_parameter'], \gettype($credentials['csrf_token']))); + } + return $credentials; } diff --git a/src/Symfony/Component/Security/Http/Tests/Authenticator/FormLoginAuthenticatorTest.php b/src/Symfony/Component/Security/Http/Tests/Authenticator/FormLoginAuthenticatorTest.php index ca0dd119b89ef..83b2bdb03243e 100644 --- a/src/Symfony/Component/Security/Http/Tests/Authenticator/FormLoginAuthenticatorTest.php +++ b/src/Symfony/Component/Security/Http/Tests/Authenticator/FormLoginAuthenticatorTest.php @@ -165,6 +165,54 @@ public function __toString() $this->assertSame('s$cr$t', $credentialsBadge->getPassword()); } + /** + * @dataProvider postOnlyDataProvider + */ + public function testHandleNonStringCsrfTokenWithArray($postOnly) + { + $request = Request::create('/login_check', 'POST', ['_username' => 'foo', 'password' => 'bar', '_csrf_token' => []]); + $request->setSession($this->createSession()); + + $this->setUpAuthenticator(['post_only' => $postOnly]); + + $this->expectException(BadRequestHttpException::class); + $this->expectExceptionMessage('The key "_csrf_token" must be a string, "array" given.'); + + $this->authenticator->authenticate($request); + } + + /** + * @dataProvider postOnlyDataProvider + */ + public function testHandleNonStringCsrfTokenWithInt($postOnly) + { + $request = Request::create('/login_check', 'POST', ['_username' => 'foo', 'password' => 'bar', '_csrf_token' => 42]); + $request->setSession($this->createSession()); + + $this->setUpAuthenticator(['post_only' => $postOnly]); + + $this->expectException(BadRequestHttpException::class); + $this->expectExceptionMessage('The key "_csrf_token" must be a string, "integer" given.'); + + $this->authenticator->authenticate($request); + } + + /** + * @dataProvider postOnlyDataProvider + */ + public function testHandleNonStringCsrfTokenWithObject($postOnly) + { + $request = Request::create('/login_check', 'POST', ['_username' => 'foo', 'password' => 'bar', '_csrf_token' => new \stdClass()]); + $request->setSession($this->createSession()); + + $this->setUpAuthenticator(['post_only' => $postOnly]); + + $this->expectException(BadRequestHttpException::class); + $this->expectExceptionMessage('The key "_csrf_token" must be a string, "object" given.'); + + $this->authenticator->authenticate($request); + } + public static function postOnlyDataProvider() { yield [true]; From ce4f815abf8efff96535c882f58b7464082d9a5e Mon Sep 17 00:00:00 2001 From: uncaught Date: Fri, 12 Apr 2024 12:38:58 +0200 Subject: [PATCH 26/65] bug #51578 [Cache] always select database for persistent redis connections --- .../Cache/Tests/Traits/RedisTraitTest.php | 53 +++++++++++++++++++ .../Component/Cache/Traits/RedisTrait.php | 20 ++----- 2 files changed, 57 insertions(+), 16 deletions(-) diff --git a/src/Symfony/Component/Cache/Tests/Traits/RedisTraitTest.php b/src/Symfony/Component/Cache/Tests/Traits/RedisTraitTest.php index 623e1582eabf7..6efaa4487c26a 100644 --- a/src/Symfony/Component/Cache/Tests/Traits/RedisTraitTest.php +++ b/src/Symfony/Component/Cache/Tests/Traits/RedisTraitTest.php @@ -74,4 +74,57 @@ public static function provideCreateConnection(): array ], ]; } + + /** + * Due to a bug in phpredis, the persistent connection will keep its last selected database. So when re-using + * a persistent connection, the database has to be re-selected, too. + * + * @see https://github.com/phpredis/phpredis/issues/1920 + * + * @group integration + */ + public function testPconnectSelectsCorrectDatabase() + { + if (!class_exists(\Redis::class)) { + throw new SkippedTestSuiteError('The "Redis" class is required.'); + } + if (!getenv('REDIS_HOST')) { + throw new SkippedTestSuiteError('REDIS_HOST env var is not defined.'); + } + if (!\ini_get('redis.pconnect.pooling_enabled')) { + throw new SkippedTestSuiteError('The bug only occurs when pooling is enabled.'); + } + + // Limit the connection pool size to 1: + if (false === $prevPoolSize = ini_set('redis.pconnect.connection_limit', 1)) { + throw new SkippedTestSuiteError('Unable to set pool size'); + } + + try { + $mock = self::getObjectForTrait(RedisTrait::class); + + $dsn = 'redis://'.getenv('REDIS_HOST'); + + $cacheKey = 'testPconnectSelectsCorrectDatabase'; + $cacheValueOnDb1 = 'I should only be on database 1'; + + // First connect to database 1 and set a value there so we can identify this database: + $db1 = $mock::createConnection($dsn, ['dbindex' => 1, 'persistent' => 1]); + self::assertInstanceOf(\Redis::class, $db1); + self::assertSame(1, $db1->getDbNum()); + $db1->set($cacheKey, $cacheValueOnDb1); + self::assertSame($cacheValueOnDb1, $db1->get($cacheKey)); + + // Unset the connection - do not use `close()` or we will lose the persistent connection: + unset($db1); + + // Now connect to database 0 and see that we do not actually ended up on database 1 by checking the value: + $db0 = $mock::createConnection($dsn, ['dbindex' => 0, 'persistent' => 1]); + self::assertInstanceOf(\Redis::class, $db0); + self::assertSame(0, $db0->getDbNum()); // Redis is lying here! We could actually be on any database! + self::assertNotSame($cacheValueOnDb1, $db0->get($cacheKey)); // This value should not exist if we are actually on db 0 + } finally { + ini_set('redis.pconnect.connection_limit', $prevPoolSize); + } + } } diff --git a/src/Symfony/Component/Cache/Traits/RedisTrait.php b/src/Symfony/Component/Cache/Traits/RedisTrait.php index 8fcd7bac5a303..af6390b9bcfa5 100644 --- a/src/Symfony/Component/Cache/Traits/RedisTrait.php +++ b/src/Symfony/Component/Cache/Traits/RedisTrait.php @@ -283,7 +283,10 @@ public static function createConnection(string $dsn, array $options = []) } if ((null !== $auth && !$redis->auth($auth)) - || ($params['dbindex'] && !$redis->select($params['dbindex'])) + // Due to a bug in phpredis we must always select the dbindex if persistent pooling is enabled + // @see https://github.com/phpredis/phpredis/issues/1920 + // @see https://github.com/symfony/symfony/issues/51578 + || (($params['dbindex'] || ('pconnect' === $connect && '0' !== \ini_get('redis.pconnect.pooling_enabled'))) && !$redis->select($params['dbindex'])) ) { $e = preg_replace('/^ERR /', '', $redis->getLastError()); throw new InvalidArgumentException('Redis connection failed: '.$e.'.'); @@ -403,9 +406,6 @@ public static function createConnection(string $dsn, array $options = []) return $redis; } - /** - * {@inheritdoc} - */ protected function doFetch(array $ids) { if (!$ids) { @@ -439,17 +439,11 @@ protected function doFetch(array $ids) return $result; } - /** - * {@inheritdoc} - */ protected function doHave(string $id) { return (bool) $this->redis->exists($id); } - /** - * {@inheritdoc} - */ protected function doClear(string $namespace) { if ($this->redis instanceof \Predis\ClientInterface) { @@ -511,9 +505,6 @@ protected function doClear(string $namespace) return $cleared; } - /** - * {@inheritdoc} - */ protected function doDelete(array $ids) { if (!$ids) { @@ -548,9 +539,6 @@ protected function doDelete(array $ids) return true; } - /** - * {@inheritdoc} - */ protected function doSave(array $values, int $lifetime) { if (!$values = $this->marshaller->marshall($values, $failed)) { From 457a3ded28308e71780a05ab7e14b159575e1194 Mon Sep 17 00:00:00 2001 From: Thomas Decaux Date: Mon, 26 Feb 2024 17:33:35 -0500 Subject: [PATCH 27/65] [HttpKernel] Fix datacollector caster for reference object property --- .../DataCollector/DataCollector.php | 16 ++++- .../Tests/DataCollector/DataCollectorTest.php | 66 +++++++++++++++++++ .../Tests/Fixtures/UsePropertyInDestruct.php | 16 +++++ .../Fixtures/WithPublicObjectProperty.php | 8 +++ 4 files changed, 104 insertions(+), 2 deletions(-) create mode 100644 src/Symfony/Component/HttpKernel/Tests/Fixtures/UsePropertyInDestruct.php create mode 100644 src/Symfony/Component/HttpKernel/Tests/Fixtures/WithPublicObjectProperty.php diff --git a/src/Symfony/Component/HttpKernel/DataCollector/DataCollector.php b/src/Symfony/Component/HttpKernel/DataCollector/DataCollector.php index ccaf66da0438f..14a6f26fdedf7 100644 --- a/src/Symfony/Component/HttpKernel/DataCollector/DataCollector.php +++ b/src/Symfony/Component/HttpKernel/DataCollector/DataCollector.php @@ -70,9 +70,21 @@ protected function getCasters() $casters = [ '*' => function ($v, array $a, Stub $s, $isNested) { if (!$v instanceof Stub) { + $b = $a; foreach ($a as $k => $v) { - if (\is_object($v) && !$v instanceof \DateTimeInterface && !$v instanceof Stub) { - $a[$k] = new CutStub($v); + if (!\is_object($v) || $v instanceof \DateTimeInterface || $v instanceof Stub) { + continue; + } + + try { + $a[$k] = $s = new CutStub($v); + + if ($b[$k] === $s) { + // we've hit a non-typed reference + $a[$k] = $v; + } + } catch (\TypeError $e) { + // we've hit a typed reference } } } diff --git a/src/Symfony/Component/HttpKernel/Tests/DataCollector/DataCollectorTest.php b/src/Symfony/Component/HttpKernel/Tests/DataCollector/DataCollectorTest.php index ae79a3c93c504..043affeda4d7b 100644 --- a/src/Symfony/Component/HttpKernel/Tests/DataCollector/DataCollectorTest.php +++ b/src/Symfony/Component/HttpKernel/Tests/DataCollector/DataCollectorTest.php @@ -15,6 +15,8 @@ use Symfony\Component\HttpFoundation\Request; use Symfony\Component\HttpFoundation\Response; use Symfony\Component\HttpKernel\Tests\Fixtures\DataCollector\CloneVarDataCollector; +use Symfony\Component\HttpKernel\Tests\Fixtures\UsePropertyInDestruct; +use Symfony\Component\HttpKernel\Tests\Fixtures\WithPublicObjectProperty; use Symfony\Component\VarDumper\Cloner\VarCloner; class DataCollectorTest extends TestCase @@ -35,4 +37,68 @@ public function testCloneVarExistingFilePath() $this->assertSame($filePath, $c->getData()[0]); } + + /** + * @requires PHP 8 + */ + public function testClassPublicObjectProperty() + { + $parent = new WithPublicObjectProperty(); + $child = new WithPublicObjectProperty(); + + $child->parent = $parent; + + $c = new CloneVarDataCollector($child); + $c->collect(new Request(), new Response()); + + $this->assertNotNull($c->getData()->parent); + } + + /** + * @requires PHP 8 + */ + public function testClassPublicObjectPropertyAsReference() + { + $parent = new WithPublicObjectProperty(); + $child = new WithPublicObjectProperty(); + + $child->parent = &$parent; + + $c = new CloneVarDataCollector($child); + $c->collect(new Request(), new Response()); + + $this->assertNotNull($c->getData()->parent); + } + + /** + * @requires PHP 8 + */ + public function testClassUsePropertyInDestruct() + { + $parent = new UsePropertyInDestruct(); + $child = new UsePropertyInDestruct(); + + $child->parent = $parent; + + $c = new CloneVarDataCollector($child); + $c->collect(new Request(), new Response()); + + $this->assertNotNull($c->getData()->parent); + } + + /** + * @requires PHP 8 + */ + public function testClassUsePropertyAsReferenceInDestruct() + { + $parent = new UsePropertyInDestruct(); + $child = new UsePropertyInDestruct(); + + $child->parent = &$parent; + + $c = new CloneVarDataCollector($child); + $c->collect(new Request(), new Response()); + + $this->assertNotNull($c->getData()->parent); + } } diff --git a/src/Symfony/Component/HttpKernel/Tests/Fixtures/UsePropertyInDestruct.php b/src/Symfony/Component/HttpKernel/Tests/Fixtures/UsePropertyInDestruct.php new file mode 100644 index 0000000000000..74225d355aadf --- /dev/null +++ b/src/Symfony/Component/HttpKernel/Tests/Fixtures/UsePropertyInDestruct.php @@ -0,0 +1,16 @@ +parent !== null) { + $this->parent->name = ''; + } + } +} diff --git a/src/Symfony/Component/HttpKernel/Tests/Fixtures/WithPublicObjectProperty.php b/src/Symfony/Component/HttpKernel/Tests/Fixtures/WithPublicObjectProperty.php new file mode 100644 index 0000000000000..92ebdb04dd429 --- /dev/null +++ b/src/Symfony/Component/HttpKernel/Tests/Fixtures/WithPublicObjectProperty.php @@ -0,0 +1,8 @@ + Date: Fri, 12 Apr 2024 23:03:22 +0200 Subject: [PATCH 28/65] fix low deps tests --- src/Symfony/Component/HttpKernel/composer.json | 1 + 1 file changed, 1 insertion(+) diff --git a/src/Symfony/Component/HttpKernel/composer.json b/src/Symfony/Component/HttpKernel/composer.json index 180a79b336adc..67d5ad4b65535 100644 --- a/src/Symfony/Component/HttpKernel/composer.json +++ b/src/Symfony/Component/HttpKernel/composer.json @@ -41,6 +41,7 @@ "symfony/stopwatch": "^4.4|^5.0|^6.0", "symfony/translation": "^4.4|^5.0|^6.0", "symfony/translation-contracts": "^1.1|^2|^3", + "symfony/var-dumper": "^4.4.31|^5.4", "psr/cache": "^1.0|^2.0|^3.0", "twig/twig": "^2.13|^3.0.4" }, From 61e5476bf2db2d5ad9feeadea7f9af44baa87282 Mon Sep 17 00:00:00 2001 From: Christian Flothmann Date: Fri, 12 Apr 2024 23:19:15 +0200 Subject: [PATCH 29/65] explicitly mark nullable parameters as nullable --- .../Tests/Normalizer/AbstractObjectNormalizerTest.php | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/Symfony/Component/Serializer/Tests/Normalizer/AbstractObjectNormalizerTest.php b/src/Symfony/Component/Serializer/Tests/Normalizer/AbstractObjectNormalizerTest.php index c4e966cb6c4d9..2ca7d79fef075 100644 --- a/src/Symfony/Component/Serializer/Tests/Normalizer/AbstractObjectNormalizerTest.php +++ b/src/Symfony/Component/Serializer/Tests/Normalizer/AbstractObjectNormalizerTest.php @@ -670,17 +670,17 @@ public function __construct() parent::__construct(null, new MetadataAwareNameConverter(new ClassMetadataFactory(new AnnotationLoader(new AnnotationReader())))); } - protected function extractAttributes(object $object, string $format = null, array $context = []): array + protected function extractAttributes(object $object, ?string $format = null, array $context = []): array { return []; } - protected function getAttributeValue(object $object, string $attribute, string $format = null, array $context = []) + protected function getAttributeValue(object $object, string $attribute, ?string $format = null, array $context = []) { return null; } - protected function setAttributeValue(object $object, string $attribute, $value, string $format = null, array $context = []) + protected function setAttributeValue(object $object, string $attribute, $value, ?string $format = null, array $context = []) { $object->$attribute = $value; } From deb5c1f5cd63d8712b634ef6de6d622090e054c0 Mon Sep 17 00:00:00 2001 From: Christian Flothmann Date: Sat, 13 Apr 2024 08:46:28 +0200 Subject: [PATCH 30/65] fix password parameter name --- .../Http/Tests/Authenticator/FormLoginAuthenticatorTest.php | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/Symfony/Component/Security/Http/Tests/Authenticator/FormLoginAuthenticatorTest.php b/src/Symfony/Component/Security/Http/Tests/Authenticator/FormLoginAuthenticatorTest.php index 83b2bdb03243e..d9595e09b50f6 100644 --- a/src/Symfony/Component/Security/Http/Tests/Authenticator/FormLoginAuthenticatorTest.php +++ b/src/Symfony/Component/Security/Http/Tests/Authenticator/FormLoginAuthenticatorTest.php @@ -170,7 +170,7 @@ public function __toString() */ public function testHandleNonStringCsrfTokenWithArray($postOnly) { - $request = Request::create('/login_check', 'POST', ['_username' => 'foo', 'password' => 'bar', '_csrf_token' => []]); + $request = Request::create('/login_check', 'POST', ['_username' => 'foo', '_password' => 'bar', '_csrf_token' => []]); $request->setSession($this->createSession()); $this->setUpAuthenticator(['post_only' => $postOnly]); @@ -186,7 +186,7 @@ public function testHandleNonStringCsrfTokenWithArray($postOnly) */ public function testHandleNonStringCsrfTokenWithInt($postOnly) { - $request = Request::create('/login_check', 'POST', ['_username' => 'foo', 'password' => 'bar', '_csrf_token' => 42]); + $request = Request::create('/login_check', 'POST', ['_username' => 'foo', '_password' => 'bar', '_csrf_token' => 42]); $request->setSession($this->createSession()); $this->setUpAuthenticator(['post_only' => $postOnly]); @@ -202,7 +202,7 @@ public function testHandleNonStringCsrfTokenWithInt($postOnly) */ public function testHandleNonStringCsrfTokenWithObject($postOnly) { - $request = Request::create('/login_check', 'POST', ['_username' => 'foo', 'password' => 'bar', '_csrf_token' => new \stdClass()]); + $request = Request::create('/login_check', 'POST', ['_username' => 'foo', '_password' => 'bar', '_csrf_token' => new \stdClass()]); $request->setSession($this->createSession()); $this->setUpAuthenticator(['post_only' => $postOnly]); From 210e9e49089d065e2e2f3f4ee90c75155e94ac86 Mon Sep 17 00:00:00 2001 From: Christian Flothmann Date: Sat, 13 Apr 2024 09:04:03 +0200 Subject: [PATCH 31/65] skip test assertions that are no longer valid with PHP >= 8.2.18/8.3.5 --- .../Tests/Hasher/NativePasswordHasherTest.php | 6 +++++- .../Tests/Hasher/SodiumPasswordHasherTest.php | 6 +++++- 2 files changed, 10 insertions(+), 2 deletions(-) diff --git a/src/Symfony/Component/PasswordHasher/Tests/Hasher/NativePasswordHasherTest.php b/src/Symfony/Component/PasswordHasher/Tests/Hasher/NativePasswordHasherTest.php index 5dc301916eed3..4cf708b806296 100644 --- a/src/Symfony/Component/PasswordHasher/Tests/Hasher/NativePasswordHasherTest.php +++ b/src/Symfony/Component/PasswordHasher/Tests/Hasher/NativePasswordHasherTest.php @@ -103,7 +103,11 @@ public function testBcryptWithNulByte() $hasher = new NativePasswordHasher(null, null, 4, \PASSWORD_BCRYPT); $plainPassword = "a\0b"; - $this->assertFalse($hasher->verify(password_hash($plainPassword, \PASSWORD_BCRYPT, ['cost' => 4]), $plainPassword)); + if (\PHP_VERSION_ID < 80218 || \PHP_VERSION_ID >= 80300 && \PHP_VERSION_ID < 80305) { + // password_hash() does not accept passwords containing NUL bytes since PHP 8.2.18 and 8.3.5 + $this->assertFalse($hasher->verify(password_hash($plainPassword, \PASSWORD_BCRYPT, ['cost' => 4]), $plainPassword)); + } + $this->assertTrue($hasher->verify($hasher->hash($plainPassword), $plainPassword)); } diff --git a/src/Symfony/Component/PasswordHasher/Tests/Hasher/SodiumPasswordHasherTest.php b/src/Symfony/Component/PasswordHasher/Tests/Hasher/SodiumPasswordHasherTest.php index 3dc97c768f6f1..101c09fc46ed3 100644 --- a/src/Symfony/Component/PasswordHasher/Tests/Hasher/SodiumPasswordHasherTest.php +++ b/src/Symfony/Component/PasswordHasher/Tests/Hasher/SodiumPasswordHasherTest.php @@ -78,7 +78,11 @@ public function testBcryptWithNulByte() $hasher = new SodiumPasswordHasher(null, null); $plainPassword = "a\0b"; - $this->assertFalse($hasher->verify(password_hash($plainPassword, \PASSWORD_BCRYPT, ['cost' => 4]), $plainPassword)); + if (\PHP_VERSION_ID < 80218 || \PHP_VERSION_ID >= 80300 && \PHP_VERSION_ID < 80305) { + // password_hash() does not accept passwords containing NUL bytes since PHP 8.2.18 and 8.3.5 + $this->assertFalse($hasher->verify(password_hash($plainPassword, \PASSWORD_BCRYPT, ['cost' => 4]), $plainPassword)); + } + $this->assertTrue($hasher->verify((new NativePasswordHasher(null, null, 4, \PASSWORD_BCRYPT))->hash($plainPassword), $plainPassword)); } From 366604d5e02f47d6218a5c693b1fe542c96fd371 Mon Sep 17 00:00:00 2001 From: Christian Flothmann Date: Sun, 14 Apr 2024 13:10:41 +0200 Subject: [PATCH 32/65] implement NodeVisitorInterface instead of extending AbstractNodeVisitor --- .../TranslationDefaultDomainNodeVisitor.php | 14 ++++---------- .../Twig/NodeVisitor/TranslationNodeVisitor.php | 14 ++++---------- 2 files changed, 8 insertions(+), 20 deletions(-) diff --git a/src/Symfony/Bridge/Twig/NodeVisitor/TranslationDefaultDomainNodeVisitor.php b/src/Symfony/Bridge/Twig/NodeVisitor/TranslationDefaultDomainNodeVisitor.php index 213365ed9f1ef..7570126fa80eb 100644 --- a/src/Symfony/Bridge/Twig/NodeVisitor/TranslationDefaultDomainNodeVisitor.php +++ b/src/Symfony/Bridge/Twig/NodeVisitor/TranslationDefaultDomainNodeVisitor.php @@ -23,12 +23,12 @@ use Twig\Node\ModuleNode; use Twig\Node\Node; use Twig\Node\SetNode; -use Twig\NodeVisitor\AbstractNodeVisitor; +use Twig\NodeVisitor\NodeVisitorInterface; /** * @author Fabien Potencier */ -final class TranslationDefaultDomainNodeVisitor extends AbstractNodeVisitor +final class TranslationDefaultDomainNodeVisitor implements NodeVisitorInterface { private $scope; @@ -37,10 +37,7 @@ public function __construct() $this->scope = new Scope(); } - /** - * {@inheritdoc} - */ - protected function doEnterNode(Node $node, Environment $env): Node + public function enterNode(Node $node, Environment $env): Node { if ($node instanceof BlockNode || $node instanceof ModuleNode) { $this->scope = $this->scope->enter(); @@ -86,10 +83,7 @@ protected function doEnterNode(Node $node, Environment $env): Node return $node; } - /** - * {@inheritdoc} - */ - protected function doLeaveNode(Node $node, Environment $env): ?Node + public function leaveNode(Node $node, Environment $env): ?Node { if ($node instanceof TransDefaultDomainNode) { return null; diff --git a/src/Symfony/Bridge/Twig/NodeVisitor/TranslationNodeVisitor.php b/src/Symfony/Bridge/Twig/NodeVisitor/TranslationNodeVisitor.php index ac0ccd21cdd37..39cd4b142af10 100644 --- a/src/Symfony/Bridge/Twig/NodeVisitor/TranslationNodeVisitor.php +++ b/src/Symfony/Bridge/Twig/NodeVisitor/TranslationNodeVisitor.php @@ -18,14 +18,14 @@ use Twig\Node\Expression\FilterExpression; use Twig\Node\Expression\FunctionExpression; use Twig\Node\Node; -use Twig\NodeVisitor\AbstractNodeVisitor; +use Twig\NodeVisitor\NodeVisitorInterface; /** * TranslationNodeVisitor extracts translation messages. * * @author Fabien Potencier */ -final class TranslationNodeVisitor extends AbstractNodeVisitor +final class TranslationNodeVisitor implements NodeVisitorInterface { public const UNDEFINED_DOMAIN = '_undefined'; @@ -49,10 +49,7 @@ public function getMessages(): array return $this->messages; } - /** - * {@inheritdoc} - */ - protected function doEnterNode(Node $node, Environment $env): Node + public function enterNode(Node $node, Environment $env): Node { if (!$this->enabled) { return $node; @@ -101,10 +98,7 @@ protected function doEnterNode(Node $node, Environment $env): Node return $node; } - /** - * {@inheritdoc} - */ - protected function doLeaveNode(Node $node, Environment $env): ?Node + public function leaveNode(Node $node, Environment $env): ?Node { return $node; } From 50acbe69d02e1c626a3048f2b603e7a403426378 Mon Sep 17 00:00:00 2001 From: Nicolas Grekas Date: Tue, 16 Apr 2024 10:45:54 +0200 Subject: [PATCH 33/65] Adjust pretty name of closures on PHP 8.4 --- .../FrameworkBundle/Console/Descriptor/JsonDescriptor.php | 2 +- .../FrameworkBundle/Console/Descriptor/MarkdownDescriptor.php | 2 +- .../FrameworkBundle/Console/Descriptor/TextDescriptor.php | 2 +- .../Bundle/FrameworkBundle/Console/Descriptor/XmlDescriptor.php | 2 +- .../Bundle/SecurityBundle/Command/DebugFirewallCommand.php | 2 +- src/Symfony/Component/ErrorHandler/Tests/ErrorHandlerTest.php | 2 +- src/Symfony/Component/EventDispatcher/Debug/WrappedListener.php | 2 +- .../HttpKernel/ControllerMetadata/ArgumentMetadataFactory.php | 2 +- .../Component/HttpKernel/DataCollector/RequestDataCollector.php | 2 +- .../HttpKernel/Tests/DataCollector/RequestDataCollectorTest.php | 2 +- src/Symfony/Component/Messenger/Handler/HandlerDescriptor.php | 2 +- src/Symfony/Component/String/LazyString.php | 2 +- src/Symfony/Component/String/Tests/LazyStringTest.php | 2 +- src/Symfony/Component/VarDumper/Caster/ReflectionCaster.php | 2 +- 14 files changed, 14 insertions(+), 14 deletions(-) diff --git a/src/Symfony/Bundle/FrameworkBundle/Console/Descriptor/JsonDescriptor.php b/src/Symfony/Bundle/FrameworkBundle/Console/Descriptor/JsonDescriptor.php index 585af1eefd539..e25ee21d72a8f 100644 --- a/src/Symfony/Bundle/FrameworkBundle/Console/Descriptor/JsonDescriptor.php +++ b/src/Symfony/Bundle/FrameworkBundle/Console/Descriptor/JsonDescriptor.php @@ -356,7 +356,7 @@ private function getCallableData($callable): array $data['type'] = 'closure'; $r = new \ReflectionFunction($callable); - if (str_contains($r->name, '{closure}')) { + if (str_contains($r->name, '{closure')) { return $data; } $data['name'] = $r->name; diff --git a/src/Symfony/Bundle/FrameworkBundle/Console/Descriptor/MarkdownDescriptor.php b/src/Symfony/Bundle/FrameworkBundle/Console/Descriptor/MarkdownDescriptor.php index f23be9d579952..12ab4d4f73435 100644 --- a/src/Symfony/Bundle/FrameworkBundle/Console/Descriptor/MarkdownDescriptor.php +++ b/src/Symfony/Bundle/FrameworkBundle/Console/Descriptor/MarkdownDescriptor.php @@ -372,7 +372,7 @@ protected function describeCallable($callable, array $options = []) $string .= "\n- Type: `closure`"; $r = new \ReflectionFunction($callable); - if (str_contains($r->name, '{closure}')) { + if (str_contains($r->name, '{closure')) { return $this->write($string."\n"); } $string .= "\n".sprintf('- Name: `%s`', $r->name); diff --git a/src/Symfony/Bundle/FrameworkBundle/Console/Descriptor/TextDescriptor.php b/src/Symfony/Bundle/FrameworkBundle/Console/Descriptor/TextDescriptor.php index 39dc8fb210ab7..f2e7cee78c486 100644 --- a/src/Symfony/Bundle/FrameworkBundle/Console/Descriptor/TextDescriptor.php +++ b/src/Symfony/Bundle/FrameworkBundle/Console/Descriptor/TextDescriptor.php @@ -611,7 +611,7 @@ private function formatCallable($callable): string if ($callable instanceof \Closure) { $r = new \ReflectionFunction($callable); - if (str_contains($r->name, '{closure}')) { + if (str_contains($r->name, '{closure')) { return 'Closure()'; } if ($class = \PHP_VERSION_ID >= 80111 ? $r->getClosureCalledClass() : $r->getClosureScopeClass()) { diff --git a/src/Symfony/Bundle/FrameworkBundle/Console/Descriptor/XmlDescriptor.php b/src/Symfony/Bundle/FrameworkBundle/Console/Descriptor/XmlDescriptor.php index 56b1af9bf6c64..8daf880f3043c 100644 --- a/src/Symfony/Bundle/FrameworkBundle/Console/Descriptor/XmlDescriptor.php +++ b/src/Symfony/Bundle/FrameworkBundle/Console/Descriptor/XmlDescriptor.php @@ -543,7 +543,7 @@ private function getCallableDocument($callable): \DOMDocument $callableXML->setAttribute('type', 'closure'); $r = new \ReflectionFunction($callable); - if (str_contains($r->name, '{closure}')) { + if (str_contains($r->name, '{closure')) { return $dom; } $callableXML->setAttribute('name', $r->name); diff --git a/src/Symfony/Bundle/SecurityBundle/Command/DebugFirewallCommand.php b/src/Symfony/Bundle/SecurityBundle/Command/DebugFirewallCommand.php index 3757c5657ae4a..6fc6a0ed95f88 100644 --- a/src/Symfony/Bundle/SecurityBundle/Command/DebugFirewallCommand.php +++ b/src/Symfony/Bundle/SecurityBundle/Command/DebugFirewallCommand.php @@ -252,7 +252,7 @@ private function formatCallable($callable): string if ($callable instanceof \Closure) { $r = new \ReflectionFunction($callable); - if (false !== strpos($r->name, '{closure}')) { + if (str_contains($r->name, '{closure')) { return 'Closure()'; } if ($class = \PHP_VERSION_ID >= 80111 ? $r->getClosureCalledClass() : $r->getClosureScopeClass()) { diff --git a/src/Symfony/Component/ErrorHandler/Tests/ErrorHandlerTest.php b/src/Symfony/Component/ErrorHandler/Tests/ErrorHandlerTest.php index 75a91d9e221cc..2b625f6388af3 100644 --- a/src/Symfony/Component/ErrorHandler/Tests/ErrorHandlerTest.php +++ b/src/Symfony/Component/ErrorHandler/Tests/ErrorHandlerTest.php @@ -171,7 +171,7 @@ public function testCallErrorExceptionInfo() } $this->assertSame(__FILE__, $e->getFile()); $this->assertSame(0, $e->getCode()); - $this->assertSame('Symfony\Component\ErrorHandler\{closure}', $trace[0]['function']); + $this->assertStringMatchesFormat('%A{closure%A}', $trace[0]['function']); $this->assertSame(ErrorHandler::class, $trace[0]['class']); $this->assertSame('triggerNotice', $trace[1]['function']); $this->assertSame(__CLASS__, $trace[1]['class']); diff --git a/src/Symfony/Component/EventDispatcher/Debug/WrappedListener.php b/src/Symfony/Component/EventDispatcher/Debug/WrappedListener.php index 80d49a168b701..792c175613501 100644 --- a/src/Symfony/Component/EventDispatcher/Debug/WrappedListener.php +++ b/src/Symfony/Component/EventDispatcher/Debug/WrappedListener.php @@ -47,7 +47,7 @@ public function __construct($listener, ?string $name, Stopwatch $stopwatch, ?Eve $this->pretty = $this->name.'::'.$listener[1]; } elseif ($listener instanceof \Closure) { $r = new \ReflectionFunction($listener); - if (str_contains($r->name, '{closure}')) { + if (str_contains($r->name, '{closure')) { $this->pretty = $this->name = 'closure'; } elseif ($class = \PHP_VERSION_ID >= 80111 ? $r->getClosureCalledClass() : $r->getClosureScopeClass()) { $this->name = $class->name; diff --git a/src/Symfony/Component/HttpKernel/ControllerMetadata/ArgumentMetadataFactory.php b/src/Symfony/Component/HttpKernel/ControllerMetadata/ArgumentMetadataFactory.php index 85bb805f34bb6..00e673349e67c 100644 --- a/src/Symfony/Component/HttpKernel/ControllerMetadata/ArgumentMetadataFactory.php +++ b/src/Symfony/Component/HttpKernel/ControllerMetadata/ArgumentMetadataFactory.php @@ -33,7 +33,7 @@ public function createArgumentMetadata($controller): array $class = $reflection->class; } else { $reflection = new \ReflectionFunction($controller); - if ($class = str_contains($reflection->name, '{closure}') ? null : (\PHP_VERSION_ID >= 80111 ? $reflection->getClosureCalledClass() : $reflection->getClosureScopeClass())) { + if ($class = str_contains($reflection->name, '{closure') ? null : (\PHP_VERSION_ID >= 80111 ? $reflection->getClosureCalledClass() : $reflection->getClosureScopeClass())) { $class = $class->name; } } diff --git a/src/Symfony/Component/HttpKernel/DataCollector/RequestDataCollector.php b/src/Symfony/Component/HttpKernel/DataCollector/RequestDataCollector.php index c56013c2eaad8..6931336f06d17 100644 --- a/src/Symfony/Component/HttpKernel/DataCollector/RequestDataCollector.php +++ b/src/Symfony/Component/HttpKernel/DataCollector/RequestDataCollector.php @@ -474,7 +474,7 @@ private function parseController($controller) 'line' => $r->getStartLine(), ]; - if (str_contains($r->name, '{closure}')) { + if (str_contains($r->name, '{closure')) { return $controller; } $controller['method'] = $r->name; diff --git a/src/Symfony/Component/HttpKernel/Tests/DataCollector/RequestDataCollectorTest.php b/src/Symfony/Component/HttpKernel/Tests/DataCollector/RequestDataCollectorTest.php index becb9b01bfd0a..e08758cf730e0 100644 --- a/src/Symfony/Component/HttpKernel/Tests/DataCollector/RequestDataCollectorTest.php +++ b/src/Symfony/Component/HttpKernel/Tests/DataCollector/RequestDataCollectorTest.php @@ -118,7 +118,7 @@ public static function provideControllerCallables(): array 'Closure', function () { return 'foo'; }, [ - 'class' => __NAMESPACE__.'\{closure}', + 'class' => \PHP_VERSION_ID >= 80400 ? sprintf('{closure:%s():%d}', __METHOD__, __LINE__ - 2) : __NAMESPACE__.'\{closure}', 'method' => null, 'file' => __FILE__, 'line' => __LINE__ - 5, diff --git a/src/Symfony/Component/Messenger/Handler/HandlerDescriptor.php b/src/Symfony/Component/Messenger/Handler/HandlerDescriptor.php index 5957e3f13823b..20d2c2043a7e7 100644 --- a/src/Symfony/Component/Messenger/Handler/HandlerDescriptor.php +++ b/src/Symfony/Component/Messenger/Handler/HandlerDescriptor.php @@ -34,7 +34,7 @@ public function __construct(callable $handler, array $options = []) $r = new \ReflectionFunction($handler); - if (str_contains($r->name, '{closure}')) { + if (str_contains($r->name, '{closure')) { $this->name = 'Closure'; } elseif (!$handler = $r->getClosureThis()) { $class = \PHP_VERSION_ID >= 80111 ? $r->getClosureCalledClass() : $r->getClosureScopeClass(); diff --git a/src/Symfony/Component/String/LazyString.php b/src/Symfony/Component/String/LazyString.php index 9c7a9c58b659b..5f7e7370d78d8 100644 --- a/src/Symfony/Component/String/LazyString.php +++ b/src/Symfony/Component/String/LazyString.php @@ -148,7 +148,7 @@ private static function getPrettyName(callable $callback): string } elseif ($callback instanceof \Closure) { $r = new \ReflectionFunction($callback); - if (false !== strpos($r->name, '{closure}') || !$class = \PHP_VERSION_ID >= 80111 ? $r->getClosureCalledClass() : $r->getClosureScopeClass()) { + if (str_contains($r->name, '{closure') || !$class = \PHP_VERSION_ID >= 80111 ? $r->getClosureCalledClass() : $r->getClosureScopeClass()) { return $r->name; } diff --git a/src/Symfony/Component/String/Tests/LazyStringTest.php b/src/Symfony/Component/String/Tests/LazyStringTest.php index c311a3be9ff06..02601b6faaf16 100644 --- a/src/Symfony/Component/String/Tests/LazyStringTest.php +++ b/src/Symfony/Component/String/Tests/LazyStringTest.php @@ -65,7 +65,7 @@ public function testReturnTypeError() $s = LazyString::fromCallable(function () { return []; }); $this->expectException(\TypeError::class); - $this->expectExceptionMessage('Return value of '.__NAMESPACE__.'\{closure}() passed to '.LazyString::class.'::fromCallable() must be of the type string, array returned.'); + $this->expectExceptionMessageMatches('{^Return value of .*\{closure.*\}\(\) passed to '.preg_quote(LazyString::class).'::fromCallable\(\) must be of the type string, array returned\.$}'); (string) $s; } diff --git a/src/Symfony/Component/VarDumper/Caster/ReflectionCaster.php b/src/Symfony/Component/VarDumper/Caster/ReflectionCaster.php index 6f1b8f2f25a5e..35fd1e8a99b2b 100644 --- a/src/Symfony/Component/VarDumper/Caster/ReflectionCaster.php +++ b/src/Symfony/Component/VarDumper/Caster/ReflectionCaster.php @@ -42,7 +42,7 @@ public static function castClosure(\Closure $c, array $a, Stub $stub, bool $isNe $a = static::castFunctionAbstract($c, $a, $stub, $isNested, $filter); - if (!str_contains($c->name, '{closure}')) { + if (!str_contains($c->name, '{closure')) { $stub->class = isset($a[$prefix.'class']) ? $a[$prefix.'class']->value.'::'.$c->name : $c->name; unset($a[$prefix.'class']); } From 9189c8cd94add9d25e44d21f61dc5c27d1552ede Mon Sep 17 00:00:00 2001 From: Nicolas Grekas Date: Tue, 16 Apr 2024 16:33:04 +0200 Subject: [PATCH 34/65] Bump ext-redis in CI on PHP >= 8.4 --- .github/workflows/unit-tests.yml | 3 ++- .../Redis/Tests/Transport/ConnectionTest.php | 14 +++++++------- .../Bridge/Redis/Transport/Connection.php | 1 + 3 files changed, 10 insertions(+), 8 deletions(-) diff --git a/.github/workflows/unit-tests.yml b/.github/workflows/unit-tests.yml index 159abdf72ac02..969835cccdde1 100644 --- a/.github/workflows/unit-tests.yml +++ b/.github/workflows/unit-tests.yml @@ -34,6 +34,7 @@ jobs: mode: low-deps - php: '8.3' - php: '8.4' + extensions: amqp,apcu,igbinary,intl,mbstring,memcached,redis #mode: experimental fail-fast: false @@ -51,7 +52,7 @@ jobs: coverage: "none" ini-values: date.timezone=UTC,memory_limit=-1,default_socket_timeout=10,session.gc_probability=0,apc.enable_cli=1,zend.assertions=1 php-version: "${{ matrix.php }}" - extensions: "${{ env.extensions }}" + extensions: "${{ matrix.extensions || env.extensions }}" tools: flex - name: Configure environment diff --git a/src/Symfony/Component/Messenger/Bridge/Redis/Tests/Transport/ConnectionTest.php b/src/Symfony/Component/Messenger/Bridge/Redis/Tests/Transport/ConnectionTest.php index 71ccea4c1752e..2e5c7bf0b043e 100644 --- a/src/Symfony/Component/Messenger/Bridge/Redis/Tests/Transport/ConnectionTest.php +++ b/src/Symfony/Component/Messenger/Bridge/Redis/Tests/Transport/ConnectionTest.php @@ -154,7 +154,7 @@ public function testKeepGettingPendingMessages() $redis = $this->createMock(\Redis::class); $redis->expects($this->exactly(3))->method('xreadgroup') - ->with('symfony', 'consumer', ['queue' => 0], 1, null) + ->with('symfony', 'consumer', ['queue' => 0], 1, 1) ->willReturn(['queue' => [['message' => json_encode(['body' => 'Test', 'headers' => []])]]]); $connection = Connection::fromDsn('redis://localhost/queue', ['delete_after_ack' => true], $redis); @@ -250,7 +250,7 @@ public function testGetPendingMessageFirst() $redis = $this->createMock(\Redis::class); $redis->expects($this->exactly(1))->method('xreadgroup') - ->with('symfony', 'consumer', ['queue' => '0'], 1, null) + ->with('symfony', 'consumer', ['queue' => '0'], 1, 1) ->willReturn(['queue' => [['message' => '{"body":"1","headers":[]}']]]); $connection = Connection::fromDsn('redis://localhost/queue', ['delete_after_ack' => true], $redis); @@ -275,11 +275,11 @@ public function testClaimAbandonedMessageWithRaceCondition() ->willReturnCallback(function (...$args) { static $series = [ // first call for pending messages - [['symfony', 'consumer', ['queue' => '0'], 1, null], []], + [['symfony', 'consumer', ['queue' => '0'], 1, 1], []], // second call because of claimed message (redisid-123) - [['symfony', 'consumer', ['queue' => '0'], 1, null], []], + [['symfony', 'consumer', ['queue' => '0'], 1, 1], []], // third call because of no result (other consumer claimed message redisid-123) - [['symfony', 'consumer', ['queue' => '>'], 1, null], []], + [['symfony', 'consumer', ['queue' => '>'], 1, 1], []], ]; [$expectedArgs, $return] = array_shift($series); @@ -311,9 +311,9 @@ public function testClaimAbandonedMessage() ->willReturnCallback(function (...$args) { static $series = [ // first call for pending messages - [['symfony', 'consumer', ['queue' => '0'], 1, null], []], + [['symfony', 'consumer', ['queue' => '0'], 1, 1], []], // second call because of claimed message (redisid-123) - [['symfony', 'consumer', ['queue' => '0'], 1, null], ['queue' => [['message' => '{"body":"1","headers":[]}']]]], + [['symfony', 'consumer', ['queue' => '0'], 1, 1], ['queue' => [['message' => '{"body":"1","headers":[]}']]]], ]; [$expectedArgs, $return] = array_shift($series); diff --git a/src/Symfony/Component/Messenger/Bridge/Redis/Transport/Connection.php b/src/Symfony/Component/Messenger/Bridge/Redis/Transport/Connection.php index 16633a354fcfe..f0c7188b3754e 100644 --- a/src/Symfony/Component/Messenger/Bridge/Redis/Transport/Connection.php +++ b/src/Symfony/Component/Messenger/Bridge/Redis/Transport/Connection.php @@ -389,6 +389,7 @@ public function get(): ?array $this->group, $this->consumer, [$this->stream => $messageId], + 1, 1 ); } catch (\RedisException $e) { From 132b4719fe8eaecb09610d574fa7d4cab0c37e8a Mon Sep 17 00:00:00 2001 From: Nicolas Grekas Date: Tue, 16 Apr 2024 17:42:30 +0200 Subject: [PATCH 35/65] Fix CI --- .../Component/Cache/Tests/Traits/RedisTraitTest.php | 12 +++++++++--- .../Component/Filesystem/Tests/FilesystemTest.php | 4 ++-- .../Component/Mime/Tests/Part/DataPartTest.php | 4 ++-- 3 files changed, 13 insertions(+), 7 deletions(-) diff --git a/src/Symfony/Component/Cache/Tests/Traits/RedisTraitTest.php b/src/Symfony/Component/Cache/Tests/Traits/RedisTraitTest.php index 6efaa4487c26a..650a0c71c1c2e 100644 --- a/src/Symfony/Component/Cache/Tests/Traits/RedisTraitTest.php +++ b/src/Symfony/Component/Cache/Tests/Traits/RedisTraitTest.php @@ -32,7 +32,9 @@ public function testCreateConnection(string $dsn, string $expectedClass) throw new SkippedTestSuiteError('REDIS_CLUSTER_HOSTS env var is not defined.'); } - $mock = self::getObjectForTrait(RedisTrait::class); + $mock = new class () { + use RedisTrait; + }; $connection = $mock::createConnection($dsn); self::assertInstanceOf($expectedClass, $connection); @@ -44,7 +46,9 @@ public function testUrlDecodeParameters() self::markTestSkipped('REDIS_AUTHENTICATED_HOST env var is not defined.'); } - $mock = self::getObjectForTrait(RedisTrait::class); + $mock = new class () { + use RedisTrait; + }; $connection = $mock::createConnection('redis://:p%40ssword@'.getenv('REDIS_AUTHENTICATED_HOST')); self::assertInstanceOf(\Redis::class, $connection); @@ -101,7 +105,9 @@ public function testPconnectSelectsCorrectDatabase() } try { - $mock = self::getObjectForTrait(RedisTrait::class); + $mock = new class () { + use RedisTrait; + }; $dsn = 'redis://'.getenv('REDIS_HOST'); diff --git a/src/Symfony/Component/Filesystem/Tests/FilesystemTest.php b/src/Symfony/Component/Filesystem/Tests/FilesystemTest.php index 47c89995f7895..101f30f898714 100644 --- a/src/Symfony/Component/Filesystem/Tests/FilesystemTest.php +++ b/src/Symfony/Component/Filesystem/Tests/FilesystemTest.php @@ -171,14 +171,14 @@ public function testCopyForOriginUrlsAndExistingLocalFileDefaultsToCopy() } $finder = new PhpExecutableFinder(); - $process = new Process(array_merge([$finder->find(false)], $finder->findArguments(), ['-dopcache.enable=0', '-dvariables_order=EGPCS', '-S', '127.0.0.1:8057'])); + $process = new Process(array_merge([$finder->find(false)], $finder->findArguments(), ['-dopcache.enable=0', '-dvariables_order=EGPCS', '-S', 'localhost:8057'])); $process->setWorkingDirectory(__DIR__.'/Fixtures/web'); $process->start(); do { usleep(50000); - } while (!@fopen('http://127.0.0.1:8057', 'r')); + } while (!@fopen('http://localhost:8057', 'r')); try { $sourceFilePath = 'http://localhost:8057/logo_symfony_header.png'; diff --git a/src/Symfony/Component/Mime/Tests/Part/DataPartTest.php b/src/Symfony/Component/Mime/Tests/Part/DataPartTest.php index 361bb00be5d19..3d306f2e8ff86 100644 --- a/src/Symfony/Component/Mime/Tests/Part/DataPartTest.php +++ b/src/Symfony/Component/Mime/Tests/Part/DataPartTest.php @@ -143,14 +143,14 @@ public function testFromPathWithUrl() } $finder = new PhpExecutableFinder(); - $process = new Process(array_merge([$finder->find(false)], $finder->findArguments(), ['-dopcache.enable=0', '-dvariables_order=EGPCS', '-S', '127.0.0.1:8057'])); + $process = new Process(array_merge([$finder->find(false)], $finder->findArguments(), ['-dopcache.enable=0', '-dvariables_order=EGPCS', '-S', 'localhost:8057'])); $process->setWorkingDirectory(__DIR__.'/../Fixtures/web'); $process->start(); try { do { usleep(50000); - } while (!@fopen('http://127.0.0.1:8057', 'r')); + } while (!@fopen('http://localhost:8057', 'r')); $p = DataPart::fromPath($file = 'http://localhost:8057/logo_symfony_header.png'); $content = file_get_contents($file); $this->assertEquals($content, $p->getBody()); From 5c0ebc92bf5da0e5a7ae008d06cb76dc1e0b81e5 Mon Sep 17 00:00:00 2001 From: Nicolas Grekas Date: Tue, 16 Apr 2024 18:32:13 +0200 Subject: [PATCH 36/65] Fix test --- .../Serializer/Tests/Normalizer/ObjectNormalizerTest.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Symfony/Component/Serializer/Tests/Normalizer/ObjectNormalizerTest.php b/src/Symfony/Component/Serializer/Tests/Normalizer/ObjectNormalizerTest.php index eff523b367f98..f3ac1ef841c62 100644 --- a/src/Symfony/Component/Serializer/Tests/Normalizer/ObjectNormalizerTest.php +++ b/src/Symfony/Component/Serializer/Tests/Normalizer/ObjectNormalizerTest.php @@ -1120,7 +1120,7 @@ public function __get($name) } } - public function __isset($name) + public function __isset($name): bool { return 'foo' === $name; } From a573eabca6005f07c67692d6bec33394071e110f Mon Sep 17 00:00:00 2001 From: Soner Sayakci Date: Tue, 16 Apr 2024 20:50:31 +0200 Subject: [PATCH 37/65] [Intl] Remove resources data from classmap generation --- src/Symfony/Component/Intl/composer.json | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/Symfony/Component/Intl/composer.json b/src/Symfony/Component/Intl/composer.json index 4e1fe6c63e501..699d53199698b 100644 --- a/src/Symfony/Component/Intl/composer.json +++ b/src/Symfony/Component/Intl/composer.json @@ -37,7 +37,8 @@ "classmap": [ "Resources/stubs" ], "files": [ "Resources/functions.php" ], "exclude-from-classmap": [ - "/Tests/" + "/Tests/", + "/Resources/data/" ] }, "minimum-stability": "dev" From a2f4d8347729c276e1501f762031ea6d2a89c576 Mon Sep 17 00:00:00 2001 From: Nicolas Grekas Date: Wed, 17 Apr 2024 09:30:55 +0200 Subject: [PATCH 38/65] [Validator] Update message translations for unit 113 (TLD) --- .../Validator/Resources/translations/validators.af.xlf | 4 ++-- .../Validator/Resources/translations/validators.ar.xlf | 4 ++-- .../Validator/Resources/translations/validators.az.xlf | 4 ++-- .../Validator/Resources/translations/validators.be.xlf | 4 ++-- .../Validator/Resources/translations/validators.bg.xlf | 4 ++-- .../Validator/Resources/translations/validators.bs.xlf | 4 ++-- .../Validator/Resources/translations/validators.ca.xlf | 4 ++-- .../Validator/Resources/translations/validators.cs.xlf | 4 ++-- .../Validator/Resources/translations/validators.cy.xlf | 4 ++-- .../Validator/Resources/translations/validators.da.xlf | 4 ++-- .../Validator/Resources/translations/validators.de.xlf | 4 ++-- .../Validator/Resources/translations/validators.el.xlf | 4 ++-- .../Validator/Resources/translations/validators.en.xlf | 4 ++-- .../Validator/Resources/translations/validators.es.xlf | 4 ++-- .../Validator/Resources/translations/validators.et.xlf | 4 ++-- .../Validator/Resources/translations/validators.eu.xlf | 4 ++-- .../Validator/Resources/translations/validators.fa.xlf | 4 ++-- .../Validator/Resources/translations/validators.fi.xlf | 4 ++-- .../Validator/Resources/translations/validators.fr.xlf | 4 ++-- .../Validator/Resources/translations/validators.gl.xlf | 4 ++-- .../Validator/Resources/translations/validators.he.xlf | 4 ++-- .../Validator/Resources/translations/validators.hr.xlf | 4 ++-- .../Validator/Resources/translations/validators.hu.xlf | 4 ++-- .../Validator/Resources/translations/validators.hy.xlf | 4 ++-- .../Validator/Resources/translations/validators.id.xlf | 4 ++-- .../Validator/Resources/translations/validators.it.xlf | 4 ++-- .../Validator/Resources/translations/validators.ja.xlf | 4 ++-- .../Validator/Resources/translations/validators.lb.xlf | 4 ++-- .../Validator/Resources/translations/validators.lt.xlf | 4 ++-- .../Validator/Resources/translations/validators.lv.xlf | 4 ++-- .../Validator/Resources/translations/validators.mk.xlf | 4 ++-- .../Validator/Resources/translations/validators.mn.xlf | 4 ++-- .../Validator/Resources/translations/validators.my.xlf | 4 ++-- .../Validator/Resources/translations/validators.nb.xlf | 4 ++-- .../Validator/Resources/translations/validators.nl.xlf | 4 ++-- .../Validator/Resources/translations/validators.nn.xlf | 4 ++-- .../Validator/Resources/translations/validators.no.xlf | 4 ++-- .../Validator/Resources/translations/validators.pl.xlf | 4 ++-- .../Validator/Resources/translations/validators.pt.xlf | 4 ++-- .../Validator/Resources/translations/validators.pt_BR.xlf | 4 ++-- .../Validator/Resources/translations/validators.ro.xlf | 4 ++-- .../Validator/Resources/translations/validators.ru.xlf | 4 ++-- .../Validator/Resources/translations/validators.sk.xlf | 4 ++-- .../Validator/Resources/translations/validators.sl.xlf | 4 ++-- .../Validator/Resources/translations/validators.sq.xlf | 4 ++-- .../Validator/Resources/translations/validators.sr_Cyrl.xlf | 4 ++-- .../Validator/Resources/translations/validators.sr_Latn.xlf | 4 ++-- .../Validator/Resources/translations/validators.sv.xlf | 4 ++-- .../Validator/Resources/translations/validators.th.xlf | 4 ++-- .../Validator/Resources/translations/validators.tl.xlf | 4 ++-- .../Validator/Resources/translations/validators.tr.xlf | 4 ++-- .../Validator/Resources/translations/validators.uk.xlf | 4 ++-- .../Validator/Resources/translations/validators.ur.xlf | 4 ++-- .../Validator/Resources/translations/validators.uz.xlf | 4 ++-- .../Validator/Resources/translations/validators.vi.xlf | 4 ++-- .../Validator/Resources/translations/validators.zh_CN.xlf | 4 ++-- .../Validator/Resources/translations/validators.zh_TW.xlf | 4 ++-- 57 files changed, 114 insertions(+), 114 deletions(-) diff --git a/src/Symfony/Component/Validator/Resources/translations/validators.af.xlf b/src/Symfony/Component/Validator/Resources/translations/validators.af.xlf index 64ce4f8c9ef8f..f975fc5164edb 100644 --- a/src/Symfony/Component/Validator/Resources/translations/validators.af.xlf +++ b/src/Symfony/Component/Validator/Resources/translations/validators.af.xlf @@ -439,8 +439,8 @@ Hierdie waarde is nie 'n geldige MAC-adres nie. - This URL does not contain a TLD. - Hierdie URL bevat nie 'n topvlakdomein (TLD) nie. + This URL is missing a top-level domain. + Die URL mis 'n topvlakdomein. diff --git a/src/Symfony/Component/Validator/Resources/translations/validators.ar.xlf b/src/Symfony/Component/Validator/Resources/translations/validators.ar.xlf index 6d78ca77a217d..a96cce98048e4 100644 --- a/src/Symfony/Component/Validator/Resources/translations/validators.ar.xlf +++ b/src/Symfony/Component/Validator/Resources/translations/validators.ar.xlf @@ -439,8 +439,8 @@ هذه القيمة ليست عنوان MAC صالحًا. - This URL does not contain a TLD. - هذا الرابط لا يحتوي على نطاق أعلى مستوى (TLD). + This URL is missing a top-level domain. + هذا الرابط يفتقر إلى نطاق أعلى مستوى. diff --git a/src/Symfony/Component/Validator/Resources/translations/validators.az.xlf b/src/Symfony/Component/Validator/Resources/translations/validators.az.xlf index fbc8bb4a91aac..2eeae5f8a69ce 100644 --- a/src/Symfony/Component/Validator/Resources/translations/validators.az.xlf +++ b/src/Symfony/Component/Validator/Resources/translations/validators.az.xlf @@ -439,8 +439,8 @@ Bu dəyər etibarlı bir MAC ünvanı deyil. - This URL does not contain a TLD. - Bu URL üst səviyyəli domen (TLD) içərmir. + This URL is missing a top-level domain. + Bu URL yuxarı səviyyəli domeni çatışmır. diff --git a/src/Symfony/Component/Validator/Resources/translations/validators.be.xlf b/src/Symfony/Component/Validator/Resources/translations/validators.be.xlf index ee481c0bcc43e..a0665388e4bee 100644 --- a/src/Symfony/Component/Validator/Resources/translations/validators.be.xlf +++ b/src/Symfony/Component/Validator/Resources/translations/validators.be.xlf @@ -439,8 +439,8 @@ Гэта значэнне не з'яўляецца сапраўдным MAC-адрасам. - This URL does not contain a TLD. - Гэты URL не ўтрымлівае дамен верхняга ўзроўню (TLD). + This URL is missing a top-level domain. + Гэтаму URL бракуе дамен верхняга ўзроўню. diff --git a/src/Symfony/Component/Validator/Resources/translations/validators.bg.xlf b/src/Symfony/Component/Validator/Resources/translations/validators.bg.xlf index 8c840db411cb4..de24ec5eb0c4d 100644 --- a/src/Symfony/Component/Validator/Resources/translations/validators.bg.xlf +++ b/src/Symfony/Component/Validator/Resources/translations/validators.bg.xlf @@ -439,8 +439,8 @@ Тази стойност не е валиден MAC адрес. - This URL does not contain a TLD. - Този URL адрес не съдържа домейн от най-високо ниво (TLD). + This URL is missing a top-level domain. + На този URL липсва домейн от най-високо ниво. diff --git a/src/Symfony/Component/Validator/Resources/translations/validators.bs.xlf b/src/Symfony/Component/Validator/Resources/translations/validators.bs.xlf index 3ec56084f9c29..9fd444a59efff 100644 --- a/src/Symfony/Component/Validator/Resources/translations/validators.bs.xlf +++ b/src/Symfony/Component/Validator/Resources/translations/validators.bs.xlf @@ -439,8 +439,8 @@ Ova vrijednost nije valjana MAC adresa. - This URL does not contain a TLD. - Ovaj URL ne sadrži domenu najvišeg nivoa (TLD). + This URL is missing a top-level domain. + Ovom URL-u nedostaje domena najvišeg nivoa. diff --git a/src/Symfony/Component/Validator/Resources/translations/validators.ca.xlf b/src/Symfony/Component/Validator/Resources/translations/validators.ca.xlf index f10451c7b2c6a..c9da5988af148 100644 --- a/src/Symfony/Component/Validator/Resources/translations/validators.ca.xlf +++ b/src/Symfony/Component/Validator/Resources/translations/validators.ca.xlf @@ -439,8 +439,8 @@ Aquest valor no és una adreça MAC vàlida. - This URL does not contain a TLD. - Aquesta URL no conté un domini de nivell superior (TLD). + This URL is missing a top-level domain. + Aquesta URL no conté un domini de nivell superior. diff --git a/src/Symfony/Component/Validator/Resources/translations/validators.cs.xlf b/src/Symfony/Component/Validator/Resources/translations/validators.cs.xlf index 4904e2c4397d7..2c4c54d9f60af 100644 --- a/src/Symfony/Component/Validator/Resources/translations/validators.cs.xlf +++ b/src/Symfony/Component/Validator/Resources/translations/validators.cs.xlf @@ -439,8 +439,8 @@ Tato hodnota není platnou MAC adresou. - This URL does not contain a TLD. - Tato URL neobsahuje doménu nejvyššího řádu (TLD). + This URL is missing a top-level domain. + Této URL chybí doména nejvyššího řádu. diff --git a/src/Symfony/Component/Validator/Resources/translations/validators.cy.xlf b/src/Symfony/Component/Validator/Resources/translations/validators.cy.xlf index 748fc791d0ef6..a1ebdf7f81e24 100644 --- a/src/Symfony/Component/Validator/Resources/translations/validators.cy.xlf +++ b/src/Symfony/Component/Validator/Resources/translations/validators.cy.xlf @@ -439,8 +439,8 @@ Nid yw'r gwerth hwn yn gyfeiriad MAC dilys. - This URL does not contain a TLD. - Nid yw'r URL hwn yn cynnwys parth lefel uchaf (TLD). + This URL is missing a top-level domain. + Mae'r URL hwn yn colli parth lefel uchaf. diff --git a/src/Symfony/Component/Validator/Resources/translations/validators.da.xlf b/src/Symfony/Component/Validator/Resources/translations/validators.da.xlf index 505edad652b66..808d8c6ad66d9 100644 --- a/src/Symfony/Component/Validator/Resources/translations/validators.da.xlf +++ b/src/Symfony/Component/Validator/Resources/translations/validators.da.xlf @@ -439,8 +439,8 @@ Denne værdi er ikke en gyldig MAC-adresse. - This URL does not contain a TLD. - Denne URL indeholder ikke et topdomæne (TLD). + This URL is missing a top-level domain. + Denne URL mangler et topdomæne. diff --git a/src/Symfony/Component/Validator/Resources/translations/validators.de.xlf b/src/Symfony/Component/Validator/Resources/translations/validators.de.xlf index d15fb9c3da8ed..57a82c22b3775 100644 --- a/src/Symfony/Component/Validator/Resources/translations/validators.de.xlf +++ b/src/Symfony/Component/Validator/Resources/translations/validators.de.xlf @@ -439,8 +439,8 @@ Dieser Wert ist keine gültige MAC-Adresse. - This URL does not contain a TLD. - Diese URL enthält keine TLD. + This URL is missing a top-level domain. + Dieser URL fehlt eine Top-Level-Domain. diff --git a/src/Symfony/Component/Validator/Resources/translations/validators.el.xlf b/src/Symfony/Component/Validator/Resources/translations/validators.el.xlf index 8bca902b799d2..a60471835745b 100644 --- a/src/Symfony/Component/Validator/Resources/translations/validators.el.xlf +++ b/src/Symfony/Component/Validator/Resources/translations/validators.el.xlf @@ -439,8 +439,8 @@ Αυτός ο αριθμός δεν είναι έγκυρη διεύθυνση MAC. - This URL does not contain a TLD. - Αυτή η διεύθυνση URL δεν περιέχει έναν τομέα ανώτατου επιπέδου (TLD). + This URL is missing a top-level domain. + Αυτή η διεύθυνση URL λείπει ένας τομέας ανώτατου επιπέδου. diff --git a/src/Symfony/Component/Validator/Resources/translations/validators.en.xlf b/src/Symfony/Component/Validator/Resources/translations/validators.en.xlf index 94ff94a1ee6d9..721139011caec 100644 --- a/src/Symfony/Component/Validator/Resources/translations/validators.en.xlf +++ b/src/Symfony/Component/Validator/Resources/translations/validators.en.xlf @@ -439,8 +439,8 @@ This value is not a valid MAC address. - This URL does not contain a TLD. - This URL does not contain a TLD. + This URL is missing a top-level domain. + This URL is missing a top-level domain. diff --git a/src/Symfony/Component/Validator/Resources/translations/validators.es.xlf b/src/Symfony/Component/Validator/Resources/translations/validators.es.xlf index 52974ea52aa16..141ec515f7893 100644 --- a/src/Symfony/Component/Validator/Resources/translations/validators.es.xlf +++ b/src/Symfony/Component/Validator/Resources/translations/validators.es.xlf @@ -439,8 +439,8 @@ Este valor no es una dirección MAC válida. - This URL does not contain a TLD. - Esta URL no contiene un dominio de nivel superior (TLD). + This URL is missing a top-level domain. + Esta URL no contiene una extensión de dominio (TLD). diff --git a/src/Symfony/Component/Validator/Resources/translations/validators.et.xlf b/src/Symfony/Component/Validator/Resources/translations/validators.et.xlf index bbacbb61391a2..d9d641322976b 100644 --- a/src/Symfony/Component/Validator/Resources/translations/validators.et.xlf +++ b/src/Symfony/Component/Validator/Resources/translations/validators.et.xlf @@ -439,8 +439,8 @@ See väärtus ei ole kehtiv MAC-aadress. - This URL does not contain a TLD. - Sellel URL-il puudub ülataseme domeen (TLD). + This URL is missing a top-level domain. + Sellel URL-il puudub ülataseme domeen. diff --git a/src/Symfony/Component/Validator/Resources/translations/validators.eu.xlf b/src/Symfony/Component/Validator/Resources/translations/validators.eu.xlf index 518539f929f36..bdcbaa393e6a1 100644 --- a/src/Symfony/Component/Validator/Resources/translations/validators.eu.xlf +++ b/src/Symfony/Component/Validator/Resources/translations/validators.eu.xlf @@ -439,8 +439,8 @@ Balio hau ez da MAC helbide baliozko bat. - This URL does not contain a TLD. - URL honek ez du goi-mailako domeinurik (TLD) du. + This URL is missing a top-level domain. + URL honek ez du goi-mailako domeinurik. diff --git a/src/Symfony/Component/Validator/Resources/translations/validators.fa.xlf b/src/Symfony/Component/Validator/Resources/translations/validators.fa.xlf index 8f91f142d062e..0f2cf5bbf1fed 100644 --- a/src/Symfony/Component/Validator/Resources/translations/validators.fa.xlf +++ b/src/Symfony/Component/Validator/Resources/translations/validators.fa.xlf @@ -439,8 +439,8 @@ این مقدار یک آدرس MAC معتبر نیست. - This URL does not contain a TLD. - این URL شامل دامنه سطح بالا (TLD) نمی‌شود. + This URL is missing a top-level domain. + این URL فاقد دامنه سطح بالا است. diff --git a/src/Symfony/Component/Validator/Resources/translations/validators.fi.xlf b/src/Symfony/Component/Validator/Resources/translations/validators.fi.xlf index 38a53d511311f..e9ca6c83347a6 100644 --- a/src/Symfony/Component/Validator/Resources/translations/validators.fi.xlf +++ b/src/Symfony/Component/Validator/Resources/translations/validators.fi.xlf @@ -439,8 +439,8 @@ Tämä arvo ei ole kelvollinen MAC-osoite. - This URL does not contain a TLD. - Tämä URL-osoite ei sisällä ylätason verkkotunnusta (TLD). + This URL is missing a top-level domain. + Tästä URL-osoitteesta puuttuu ylätason verkkotunnus. diff --git a/src/Symfony/Component/Validator/Resources/translations/validators.fr.xlf b/src/Symfony/Component/Validator/Resources/translations/validators.fr.xlf index 6194801874e7e..27a57d0331fe6 100644 --- a/src/Symfony/Component/Validator/Resources/translations/validators.fr.xlf +++ b/src/Symfony/Component/Validator/Resources/translations/validators.fr.xlf @@ -439,8 +439,8 @@ Cette valeur n'est pas une adresse MAC valide. - This URL does not contain a TLD. - Cette URL ne contient pas de domaine de premier niveau (TLD). + This URL is missing a top-level domain. + Cette URL est dépourvue de domaine de premier niveau. diff --git a/src/Symfony/Component/Validator/Resources/translations/validators.gl.xlf b/src/Symfony/Component/Validator/Resources/translations/validators.gl.xlf index f097bd30858c8..2a1199bed5c71 100644 --- a/src/Symfony/Component/Validator/Resources/translations/validators.gl.xlf +++ b/src/Symfony/Component/Validator/Resources/translations/validators.gl.xlf @@ -439,8 +439,8 @@ Este valor non é un enderezo MAC válido. - This URL does not contain a TLD. - Esta URL non contén un dominio de nivel superior (TLD). + This URL is missing a top-level domain. + Esta URL non contén un dominio de nivel superior. diff --git a/src/Symfony/Component/Validator/Resources/translations/validators.he.xlf b/src/Symfony/Component/Validator/Resources/translations/validators.he.xlf index 2f506d39105cc..cd406b4eb86c8 100644 --- a/src/Symfony/Component/Validator/Resources/translations/validators.he.xlf +++ b/src/Symfony/Component/Validator/Resources/translations/validators.he.xlf @@ -439,8 +439,8 @@ ערך זה אינו כתובת MAC תקפה. - This URL does not contain a TLD. - כתובת URL זו אינה מכילה דומיין רמה עליונה (TLD). + This URL is missing a top-level domain. + לכתובת URL זו חסר דומיין רמה עליונה. diff --git a/src/Symfony/Component/Validator/Resources/translations/validators.hr.xlf b/src/Symfony/Component/Validator/Resources/translations/validators.hr.xlf index 43cb98ce55c6f..d126c32137189 100644 --- a/src/Symfony/Component/Validator/Resources/translations/validators.hr.xlf +++ b/src/Symfony/Component/Validator/Resources/translations/validators.hr.xlf @@ -439,8 +439,8 @@ Ova vrijednost nije valjana MAC adresa. - This URL does not contain a TLD. - Ovaj URL ne sadrži najvišu razinu domene (TLD). + This URL is missing a top-level domain. + Ovom URL-u nedostaje najviša razina domene. diff --git a/src/Symfony/Component/Validator/Resources/translations/validators.hu.xlf b/src/Symfony/Component/Validator/Resources/translations/validators.hu.xlf index 308594d9fb405..d7deb83d04341 100644 --- a/src/Symfony/Component/Validator/Resources/translations/validators.hu.xlf +++ b/src/Symfony/Component/Validator/Resources/translations/validators.hu.xlf @@ -439,8 +439,8 @@ Ez az érték nem érvényes MAC-cím. - This URL does not contain a TLD. - Ez az URL nem tartalmaz felső szintű domain-t (TLD). + This URL is missing a top-level domain. + Ennek az URL-nek hiányzik a legfelső szintű domain. diff --git a/src/Symfony/Component/Validator/Resources/translations/validators.hy.xlf b/src/Symfony/Component/Validator/Resources/translations/validators.hy.xlf index 0dc7b52f8a802..d8ff322e6ed76 100644 --- a/src/Symfony/Component/Validator/Resources/translations/validators.hy.xlf +++ b/src/Symfony/Component/Validator/Resources/translations/validators.hy.xlf @@ -439,8 +439,8 @@ Այս արժեքը վավեր MAC հասցե չէ։ - This URL does not contain a TLD. - Այս URL-ը չունի վերին մակարդակի դոմեյն (TLD). + This URL is missing a top-level domain. + Այս URL-ը չունի վերին մակարդակի դոմեյն: diff --git a/src/Symfony/Component/Validator/Resources/translations/validators.id.xlf b/src/Symfony/Component/Validator/Resources/translations/validators.id.xlf index c6161aa4147e8..109cb6891c92e 100644 --- a/src/Symfony/Component/Validator/Resources/translations/validators.id.xlf +++ b/src/Symfony/Component/Validator/Resources/translations/validators.id.xlf @@ -439,8 +439,8 @@ Nilai ini bukan alamat MAC yang valid. - This URL does not contain a TLD. - URL ini tidak mengandung domain tingkat atas (TLD). + This URL is missing a top-level domain. + URL ini kehilangan domain tingkat atas. diff --git a/src/Symfony/Component/Validator/Resources/translations/validators.it.xlf b/src/Symfony/Component/Validator/Resources/translations/validators.it.xlf index 4b5ca7a7064a0..df67a2c082b5c 100644 --- a/src/Symfony/Component/Validator/Resources/translations/validators.it.xlf +++ b/src/Symfony/Component/Validator/Resources/translations/validators.it.xlf @@ -439,8 +439,8 @@ Questo valore non è un indirizzo MAC valido. - This URL does not contain a TLD. - Questo URL non contiene un dominio di primo livello (TLD). + This URL is missing a top-level domain. + Questo URL è privo di un dominio di primo livello. diff --git a/src/Symfony/Component/Validator/Resources/translations/validators.ja.xlf b/src/Symfony/Component/Validator/Resources/translations/validators.ja.xlf index 25009e129f081..c977df4a3e186 100644 --- a/src/Symfony/Component/Validator/Resources/translations/validators.ja.xlf +++ b/src/Symfony/Component/Validator/Resources/translations/validators.ja.xlf @@ -439,8 +439,8 @@ この値は有効なMACアドレスではありません。 - This URL does not contain a TLD. - このURLにはトップレベルドメイン(TLD)が含まれていません。 + This URL is missing a top-level domain. + このURLはトップレベルドメインがありません。 diff --git a/src/Symfony/Component/Validator/Resources/translations/validators.lb.xlf b/src/Symfony/Component/Validator/Resources/translations/validators.lb.xlf index 20f5dc679e285..28d1eff019aac 100644 --- a/src/Symfony/Component/Validator/Resources/translations/validators.lb.xlf +++ b/src/Symfony/Component/Validator/Resources/translations/validators.lb.xlf @@ -439,8 +439,8 @@ Dëse Wäert ass keng gülteg MAC-Adress. - This URL does not contain a TLD. - Dësen URL enthält keng Top-Level-Domain (TLD). + This URL is missing a top-level domain. + Dësen URL feelt eng Top-Level-Domain. diff --git a/src/Symfony/Component/Validator/Resources/translations/validators.lt.xlf b/src/Symfony/Component/Validator/Resources/translations/validators.lt.xlf index 61ba74fb63c5e..26b3a4e77e374 100644 --- a/src/Symfony/Component/Validator/Resources/translations/validators.lt.xlf +++ b/src/Symfony/Component/Validator/Resources/translations/validators.lt.xlf @@ -439,8 +439,8 @@ Ši vertė nėra galiojantis MAC adresas. - This URL does not contain a TLD. - Šis URL neturi aukščiausio lygio domeno (TLD). + This URL is missing a top-level domain. + Šiam URL trūksta aukščiausio lygio domeno. diff --git a/src/Symfony/Component/Validator/Resources/translations/validators.lv.xlf b/src/Symfony/Component/Validator/Resources/translations/validators.lv.xlf index 5ff2c412215b2..9bbaafd0ce334 100644 --- a/src/Symfony/Component/Validator/Resources/translations/validators.lv.xlf +++ b/src/Symfony/Component/Validator/Resources/translations/validators.lv.xlf @@ -439,8 +439,8 @@ Šī vērtība nav derīga MAC adrese. - This URL does not contain a TLD. - Šis URL nesatur augšējā līmeņa domēnu (TLD). + This URL is missing a top-level domain. + Šim URL trūkst augšējā līmeņa domēna. diff --git a/src/Symfony/Component/Validator/Resources/translations/validators.mk.xlf b/src/Symfony/Component/Validator/Resources/translations/validators.mk.xlf index 31f164eee64c7..d941f59ea8c8c 100644 --- a/src/Symfony/Component/Validator/Resources/translations/validators.mk.xlf +++ b/src/Symfony/Component/Validator/Resources/translations/validators.mk.xlf @@ -439,8 +439,8 @@ Оваа вредност не е валидна MAC адреса. - This URL does not contain a TLD. - Овој URL не содржи домен од највисоко ниво (TLD). + This URL is missing a top-level domain. + На овој URL недостасува домен од највисоко ниво. diff --git a/src/Symfony/Component/Validator/Resources/translations/validators.mn.xlf b/src/Symfony/Component/Validator/Resources/translations/validators.mn.xlf index e284b5db7e214..4f997a7031592 100644 --- a/src/Symfony/Component/Validator/Resources/translations/validators.mn.xlf +++ b/src/Symfony/Component/Validator/Resources/translations/validators.mn.xlf @@ -439,8 +439,8 @@ Энэ утга хүчинтэй MAC хаяг биш юм. - This URL does not contain a TLD. - Энэ URL нь дээд түвшингийн домейн (TLD)-гүй байна. + This URL is missing a top-level domain. + Энэ URL дээд түвшингийн домейн дутуу байна. diff --git a/src/Symfony/Component/Validator/Resources/translations/validators.my.xlf b/src/Symfony/Component/Validator/Resources/translations/validators.my.xlf index 58f1ff48d1f1b..57b6e276dc9c5 100644 --- a/src/Symfony/Component/Validator/Resources/translations/validators.my.xlf +++ b/src/Symfony/Component/Validator/Resources/translations/validators.my.xlf @@ -439,8 +439,8 @@ ဤတန်ဖိုးသည် မှန်ကန်သော MAC လိပ်စာ မဟုတ်ပါ။ - This URL does not contain a TLD. - ဤ URL သည် အမြင့်ဆုံးအဆင့်ဒိုမိန်း (TLD) မပါရှိပါ။ + This URL is missing a top-level domain. + ဤ URL တွင် အမြင့်ဆုံးအဆင့်ဒိုမိန်း ပါဝင်မရှိပါ။ diff --git a/src/Symfony/Component/Validator/Resources/translations/validators.nb.xlf b/src/Symfony/Component/Validator/Resources/translations/validators.nb.xlf index 0b4c3becb15e6..27a4d3c55a1ef 100644 --- a/src/Symfony/Component/Validator/Resources/translations/validators.nb.xlf +++ b/src/Symfony/Component/Validator/Resources/translations/validators.nb.xlf @@ -439,8 +439,8 @@ Denne verdien er ikke en gyldig MAC-adresse. - This URL does not contain a TLD. - Denne URL-en inneholder ikke et toppnivådomene (TLD). + This URL is missing a top-level domain. + Denne URL-en mangler et toppnivådomene. diff --git a/src/Symfony/Component/Validator/Resources/translations/validators.nl.xlf b/src/Symfony/Component/Validator/Resources/translations/validators.nl.xlf index 5921aff720da2..7596799d0d904 100644 --- a/src/Symfony/Component/Validator/Resources/translations/validators.nl.xlf +++ b/src/Symfony/Component/Validator/Resources/translations/validators.nl.xlf @@ -439,8 +439,8 @@ Deze waarde is geen geldig MAC-adres. - This URL does not contain a TLD. - Deze URL bevat geen topleveldomein (TLD). + This URL is missing a top-level domain. + Deze URL mist een top-level domein. diff --git a/src/Symfony/Component/Validator/Resources/translations/validators.nn.xlf b/src/Symfony/Component/Validator/Resources/translations/validators.nn.xlf index 9f2e950fda9af..de400b7d5115c 100644 --- a/src/Symfony/Component/Validator/Resources/translations/validators.nn.xlf +++ b/src/Symfony/Component/Validator/Resources/translations/validators.nn.xlf @@ -439,8 +439,8 @@ Denne verdien er ikkje ein gyldig MAC-adresse. - This URL does not contain a TLD. - Denne URL-en inneheld ikkje eit toppnivådomene (TLD). + This URL is missing a top-level domain. + Denne URL-en manglar eit toppnivådomene. diff --git a/src/Symfony/Component/Validator/Resources/translations/validators.no.xlf b/src/Symfony/Component/Validator/Resources/translations/validators.no.xlf index 0b4c3becb15e6..27a4d3c55a1ef 100644 --- a/src/Symfony/Component/Validator/Resources/translations/validators.no.xlf +++ b/src/Symfony/Component/Validator/Resources/translations/validators.no.xlf @@ -439,8 +439,8 @@ Denne verdien er ikke en gyldig MAC-adresse. - This URL does not contain a TLD. - Denne URL-en inneholder ikke et toppnivådomene (TLD). + This URL is missing a top-level domain. + Denne URL-en mangler et toppnivådomene. diff --git a/src/Symfony/Component/Validator/Resources/translations/validators.pl.xlf b/src/Symfony/Component/Validator/Resources/translations/validators.pl.xlf index f3f43d4393e4b..18db2a41eacfd 100644 --- a/src/Symfony/Component/Validator/Resources/translations/validators.pl.xlf +++ b/src/Symfony/Component/Validator/Resources/translations/validators.pl.xlf @@ -439,8 +439,8 @@ Ta wartość nie jest prawidłowym adresem MAC. - This URL does not contain a TLD. - Podany adres URL nie zawiera domeny najwyższego poziomu (TLD). + This URL is missing a top-level domain. + Ten URL nie ma domeny najwyższego poziomu. diff --git a/src/Symfony/Component/Validator/Resources/translations/validators.pt.xlf b/src/Symfony/Component/Validator/Resources/translations/validators.pt.xlf index ffd79f80aca69..ed28ee31ea639 100644 --- a/src/Symfony/Component/Validator/Resources/translations/validators.pt.xlf +++ b/src/Symfony/Component/Validator/Resources/translations/validators.pt.xlf @@ -439,8 +439,8 @@ Este valor não é um endereço MAC válido. - This URL does not contain a TLD. - Esta URL não contém um domínio de topo (TLD). + This URL is missing a top-level domain. + Esta URL está faltando um domínio de topo. diff --git a/src/Symfony/Component/Validator/Resources/translations/validators.pt_BR.xlf b/src/Symfony/Component/Validator/Resources/translations/validators.pt_BR.xlf index d0b10db08b525..e5fe095eace75 100644 --- a/src/Symfony/Component/Validator/Resources/translations/validators.pt_BR.xlf +++ b/src/Symfony/Component/Validator/Resources/translations/validators.pt_BR.xlf @@ -439,8 +439,8 @@ Este valor não é um endereço MAC válido. - This URL does not contain a TLD. - Esta URL não contém um domínio de topo (TLD). + This URL is missing a top-level domain. + Esta URL está faltando um domínio de topo. diff --git a/src/Symfony/Component/Validator/Resources/translations/validators.ro.xlf b/src/Symfony/Component/Validator/Resources/translations/validators.ro.xlf index 0a785c6534786..3d0b819a95441 100644 --- a/src/Symfony/Component/Validator/Resources/translations/validators.ro.xlf +++ b/src/Symfony/Component/Validator/Resources/translations/validators.ro.xlf @@ -439,8 +439,8 @@ Această valoare nu este o adresă MAC validă. - This URL does not contain a TLD. - Acest URL nu conține un domeniu de nivel superior (TLD). + This URL is missing a top-level domain. + Acest URL îi lipsește un domeniu de nivel superior. diff --git a/src/Symfony/Component/Validator/Resources/translations/validators.ru.xlf b/src/Symfony/Component/Validator/Resources/translations/validators.ru.xlf index d6628053e575e..241cba52e3d61 100644 --- a/src/Symfony/Component/Validator/Resources/translations/validators.ru.xlf +++ b/src/Symfony/Component/Validator/Resources/translations/validators.ru.xlf @@ -439,8 +439,8 @@ Это значение не является действительным MAC-адресом. - This URL does not contain a TLD. - Этот URL не содержит домен верхнего уровня (TLD). + This URL is missing a top-level domain. + Этому URL не хватает домена верхнего уровня. diff --git a/src/Symfony/Component/Validator/Resources/translations/validators.sk.xlf b/src/Symfony/Component/Validator/Resources/translations/validators.sk.xlf index bb9602ff5335f..8886395e6e8c7 100644 --- a/src/Symfony/Component/Validator/Resources/translations/validators.sk.xlf +++ b/src/Symfony/Component/Validator/Resources/translations/validators.sk.xlf @@ -439,8 +439,8 @@ Táto hodnota nie je platnou MAC adresou. - This URL does not contain a TLD. - Táto URL neobsahuje doménu najvyššej úrovne (TLD). + This URL is missing a top-level domain. + Tomuto URL chýba doména najvyššej úrovne. diff --git a/src/Symfony/Component/Validator/Resources/translations/validators.sl.xlf b/src/Symfony/Component/Validator/Resources/translations/validators.sl.xlf index d5a4e01c30443..03e750b8af75b 100644 --- a/src/Symfony/Component/Validator/Resources/translations/validators.sl.xlf +++ b/src/Symfony/Component/Validator/Resources/translations/validators.sl.xlf @@ -439,8 +439,8 @@ Ta vrednost ni veljaven MAC naslov. - This URL does not contain a TLD. - Ta URL ne vsebuje domene najvišje ravni (TLD). + This URL is missing a top-level domain. + Temu URL manjka domena najvišje ravni. diff --git a/src/Symfony/Component/Validator/Resources/translations/validators.sq.xlf b/src/Symfony/Component/Validator/Resources/translations/validators.sq.xlf index 822260dbd3528..e9b31b88258d9 100644 --- a/src/Symfony/Component/Validator/Resources/translations/validators.sq.xlf +++ b/src/Symfony/Component/Validator/Resources/translations/validators.sq.xlf @@ -448,8 +448,8 @@ Kjo nuk është një adresë e vlefshme e Kontrollit të Qasjes në Media (MAC). - This URL does not contain a TLD. - Ky URL nuk përmban një domain nivelin më të lartë (TLD). + This URL is missing a top-level domain. + Kësaj URL i mungon një domain i nivelit të lartë. diff --git a/src/Symfony/Component/Validator/Resources/translations/validators.sr_Cyrl.xlf b/src/Symfony/Component/Validator/Resources/translations/validators.sr_Cyrl.xlf index 0b588a47dd82c..0550626d03f4d 100644 --- a/src/Symfony/Component/Validator/Resources/translations/validators.sr_Cyrl.xlf +++ b/src/Symfony/Component/Validator/Resources/translations/validators.sr_Cyrl.xlf @@ -439,8 +439,8 @@ Ова вредност није валидна MAC адреса. - This URL does not contain a TLD. - Овај URL не садржи домен највишег нивоа (TLD). + This URL is missing a top-level domain. + Овом URL недостаје домен највишег нивоа. diff --git a/src/Symfony/Component/Validator/Resources/translations/validators.sr_Latn.xlf b/src/Symfony/Component/Validator/Resources/translations/validators.sr_Latn.xlf index 8d36355d82922..5a85bd764d3cc 100644 --- a/src/Symfony/Component/Validator/Resources/translations/validators.sr_Latn.xlf +++ b/src/Symfony/Component/Validator/Resources/translations/validators.sr_Latn.xlf @@ -439,8 +439,8 @@ Ova vrednost nije validna MAC adresa. - This URL does not contain a TLD. - Ovaj URL ne sadrži domen najvišeg nivoa (TLD). + This URL is missing a top-level domain. + Ovom URL nedostaje domen najvišeg nivoa. diff --git a/src/Symfony/Component/Validator/Resources/translations/validators.sv.xlf b/src/Symfony/Component/Validator/Resources/translations/validators.sv.xlf index bb20273d3fcb0..d7be868c10e96 100644 --- a/src/Symfony/Component/Validator/Resources/translations/validators.sv.xlf +++ b/src/Symfony/Component/Validator/Resources/translations/validators.sv.xlf @@ -439,8 +439,8 @@ Värdet är inte en giltig MAC-adress. - This URL does not contain a TLD. - Denna URL innehåller inte ett toppdomän (TLD). + This URL is missing a top-level domain. + Denna URL saknar en toppdomän. diff --git a/src/Symfony/Component/Validator/Resources/translations/validators.th.xlf b/src/Symfony/Component/Validator/Resources/translations/validators.th.xlf index d3562dc28f889..0d811ed040f88 100644 --- a/src/Symfony/Component/Validator/Resources/translations/validators.th.xlf +++ b/src/Symfony/Component/Validator/Resources/translations/validators.th.xlf @@ -439,8 +439,8 @@ ค่านี้ไม่ใช่ที่อยู่ MAC ที่ถูกต้อง - This URL does not contain a TLD. - URL นี้ไม่มีโดเมนระดับสูงสุด (TLD) อยู่. + This URL is missing a top-level domain. + URL นี้ขาดโดเมนระดับสูงสุด. diff --git a/src/Symfony/Component/Validator/Resources/translations/validators.tl.xlf b/src/Symfony/Component/Validator/Resources/translations/validators.tl.xlf index 9fcc43451a2e5..8e8146a0faade 100644 --- a/src/Symfony/Component/Validator/Resources/translations/validators.tl.xlf +++ b/src/Symfony/Component/Validator/Resources/translations/validators.tl.xlf @@ -439,8 +439,8 @@ Ang halagang ito ay hindi isang wastong MAC address. - This URL does not contain a TLD. - Ang URL na ito ay walang top-level domain (TLD). + This URL is missing a top-level domain. + Kulang ang URL na ito sa top-level domain. diff --git a/src/Symfony/Component/Validator/Resources/translations/validators.tr.xlf b/src/Symfony/Component/Validator/Resources/translations/validators.tr.xlf index 69ff5b41fe1fa..3553af7b74ddd 100644 --- a/src/Symfony/Component/Validator/Resources/translations/validators.tr.xlf +++ b/src/Symfony/Component/Validator/Resources/translations/validators.tr.xlf @@ -439,8 +439,8 @@ Bu değer geçerli bir MAC adresi değil. - This URL does not contain a TLD. - Bu URL bir üst düzey alan adı (TLD) içermiyor. + This URL is missing a top-level domain. + Bu URL bir üst düzey alan adı eksik. diff --git a/src/Symfony/Component/Validator/Resources/translations/validators.uk.xlf b/src/Symfony/Component/Validator/Resources/translations/validators.uk.xlf index 923c03ed0081d..8e93ea505e31d 100644 --- a/src/Symfony/Component/Validator/Resources/translations/validators.uk.xlf +++ b/src/Symfony/Component/Validator/Resources/translations/validators.uk.xlf @@ -439,8 +439,8 @@ Це значення не є дійсною MAC-адресою. - This URL does not contain a TLD. - Цей URL не містить домен верхнього рівня (TLD). + This URL is missing a top-level domain. + Цьому URL бракує домену верхнього рівня. diff --git a/src/Symfony/Component/Validator/Resources/translations/validators.ur.xlf b/src/Symfony/Component/Validator/Resources/translations/validators.ur.xlf index 63bbaf3c40146..f994cb57a84e2 100644 --- a/src/Symfony/Component/Validator/Resources/translations/validators.ur.xlf +++ b/src/Symfony/Component/Validator/Resources/translations/validators.ur.xlf @@ -439,8 +439,8 @@ یہ قیمت کوئی درست MAC پتہ نہیں ہے۔ - This URL does not contain a TLD. - یہ URL اوپری سطح کے ڈومین (TLD) کو شامل نہیں کرتا۔ + This URL is missing a top-level domain. + اس URL میں ٹاپ لیول ڈومین موجود نہیں ہے۔ diff --git a/src/Symfony/Component/Validator/Resources/translations/validators.uz.xlf b/src/Symfony/Component/Validator/Resources/translations/validators.uz.xlf index 9884cfea2996c..1e43fb0fff8cf 100644 --- a/src/Symfony/Component/Validator/Resources/translations/validators.uz.xlf +++ b/src/Symfony/Component/Validator/Resources/translations/validators.uz.xlf @@ -439,8 +439,8 @@ Bu qiymat haqiqiy MAC manzil emas. - This URL does not contain a TLD. - Bu URL yuqori darajali domen (TLD)ni o'z ichiga olmaydi. + This URL is missing a top-level domain. + Bu URL yuqori darajali domenni o'z ichiga olmaydi. diff --git a/src/Symfony/Component/Validator/Resources/translations/validators.vi.xlf b/src/Symfony/Component/Validator/Resources/translations/validators.vi.xlf index 01202c414dc8f..b3073cc7370a0 100644 --- a/src/Symfony/Component/Validator/Resources/translations/validators.vi.xlf +++ b/src/Symfony/Component/Validator/Resources/translations/validators.vi.xlf @@ -439,8 +439,8 @@ Giá trị này không phải là địa chỉ MAC hợp lệ. - This URL does not contain a TLD. - URL này không chứa tên miền cấp cao (TLD). + This URL is missing a top-level domain. + URL này thiếu miền cấp cao. diff --git a/src/Symfony/Component/Validator/Resources/translations/validators.zh_CN.xlf b/src/Symfony/Component/Validator/Resources/translations/validators.zh_CN.xlf index 6380d0a83faee..fabf86d3b0e13 100644 --- a/src/Symfony/Component/Validator/Resources/translations/validators.zh_CN.xlf +++ b/src/Symfony/Component/Validator/Resources/translations/validators.zh_CN.xlf @@ -439,8 +439,8 @@ 该值不是有效的MAC地址。 - This URL does not contain a TLD. - 此URL不包含顶级域名(TLD)。 + This URL is missing a top-level domain. + 此URL缺少顶级域名。 diff --git a/src/Symfony/Component/Validator/Resources/translations/validators.zh_TW.xlf b/src/Symfony/Component/Validator/Resources/translations/validators.zh_TW.xlf index e4e32f7761545..feee108a1bd3d 100644 --- a/src/Symfony/Component/Validator/Resources/translations/validators.zh_TW.xlf +++ b/src/Symfony/Component/Validator/Resources/translations/validators.zh_TW.xlf @@ -439,8 +439,8 @@ 這不是一個有效的MAC地址。 - This URL does not contain a TLD. - 此URL不含頂級域名(TLD)。 + This URL is missing a top-level domain. + 此URL缺少頂級域名。 From 6c74abfd1992e619d29670f0733bfbb5070b53fb Mon Sep 17 00:00:00 2001 From: Eviljeks <22118652+Eviljeks@users.noreply.github.com> Date: Wed, 17 Apr 2024 10:56:15 +0300 Subject: [PATCH 39/65] review uk translations v2 --- .../Resources/translations/validators.uk.xlf | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/src/Symfony/Component/Validator/Resources/translations/validators.uk.xlf b/src/Symfony/Component/Validator/Resources/translations/validators.uk.xlf index 8e93ea505e31d..7b9918910b151 100644 --- a/src/Symfony/Component/Validator/Resources/translations/validators.uk.xlf +++ b/src/Symfony/Component/Validator/Resources/translations/validators.uk.xlf @@ -136,7 +136,7 @@ This value is not a valid IP address. - Це значення не є дійсною IP-адресою. + Це значення не є дійсною IP-адресою. This value is not a valid language. @@ -192,7 +192,7 @@ No temporary folder was configured in php.ini, or the configured folder does not exist. - У php.ini не було налаштовано тимчасової теки, або налаштована тека не існує. + У php.ini не було налаштовано тимчасової теки, або налаштована тека не існує. Cannot write temporary file to disk. @@ -224,7 +224,7 @@ This value is not a valid International Bank Account Number (IBAN). - Це значення не є дійсним Міжнародним банківським рахунком (IBAN). + Це значення не є дійсним міжнародним номером банківського рахунку (IBAN). This value is not a valid ISBN-10. @@ -312,7 +312,7 @@ This value is not a valid Business Identifier Code (BIC). - Це значення не є дійсним Кодом ідентифікації бізнесу (BIC). + Це значення не є дійсним банківським кодом (BIC). Error @@ -320,7 +320,7 @@ This value is not a valid UUID. - Це значення не є дійсним UUID. + Це значення не є дійсним UUID. This value should be a multiple of {{ compared_value }}. @@ -436,11 +436,11 @@ This value is not a valid MAC address. - Це значення не є дійсною MAC-адресою. + Це значення не є дійсною MAC-адресою. This URL is missing a top-level domain. - Цьому URL бракує домену верхнього рівня. + Цьому URL не вистачає домену верхнього рівня. From bcac30e5bc8fe897b05add02d9cb18f2ecd655ea Mon Sep 17 00:00:00 2001 From: Asis Pattisahusiwa <79239132+asispts@users.noreply.github.com> Date: Wed, 17 Apr 2024 15:08:16 +0700 Subject: [PATCH 40/65] Update translation --- .../Validator/Resources/translations/validators.id.xlf | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Symfony/Component/Validator/Resources/translations/validators.id.xlf b/src/Symfony/Component/Validator/Resources/translations/validators.id.xlf index 109cb6891c92e..980b1a676704b 100644 --- a/src/Symfony/Component/Validator/Resources/translations/validators.id.xlf +++ b/src/Symfony/Component/Validator/Resources/translations/validators.id.xlf @@ -440,7 +440,7 @@ This URL is missing a top-level domain. - URL ini kehilangan domain tingkat atas. + URL ini tidak memiliki domain tingkat atas. From 2e82e6ce1b8b9665f0eef4fdf9e8bfd7da70bd75 Mon Sep 17 00:00:00 2001 From: connor Date: Tue, 16 Apr 2024 17:55:36 +0200 Subject: [PATCH 41/65] review and fix hungarian validation message --- .../Validator/Resources/translations/validators.hu.xlf | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Symfony/Component/Validator/Resources/translations/validators.hu.xlf b/src/Symfony/Component/Validator/Resources/translations/validators.hu.xlf index d7deb83d04341..a31848c775fde 100644 --- a/src/Symfony/Component/Validator/Resources/translations/validators.hu.xlf +++ b/src/Symfony/Component/Validator/Resources/translations/validators.hu.xlf @@ -440,7 +440,7 @@ This URL is missing a top-level domain. - Ennek az URL-nek hiányzik a legfelső szintű domain. + Az URL-ből hiányzik a legfelső szintű tartomány (top-level domain). From d9351cc15ecd105841a9d5cac9571317a55f42ef Mon Sep 17 00:00:00 2001 From: HypeMC Date: Sun, 14 Apr 2024 07:40:57 +0200 Subject: [PATCH 42/65] [Validator] Missing translations for Croatian (hr) --- .../Validator/Resources/translations/validators.hr.xlf | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Symfony/Component/Validator/Resources/translations/validators.hr.xlf b/src/Symfony/Component/Validator/Resources/translations/validators.hr.xlf index d126c32137189..a7542a9353293 100644 --- a/src/Symfony/Component/Validator/Resources/translations/validators.hr.xlf +++ b/src/Symfony/Component/Validator/Resources/translations/validators.hr.xlf @@ -440,7 +440,7 @@ This URL is missing a top-level domain. - Ovom URL-u nedostaje najviša razina domene. + Ovom URL-u nedostaje vršna domena. From d37b9e7ede6b4a8dce68538854594853f6ea71b1 Mon Sep 17 00:00:00 2001 From: Tomasz Kowalczyk Date: Wed, 17 Apr 2024 12:42:45 +0200 Subject: [PATCH 43/65] [Validator] reviewed Polish translation for unit 113 --- .../Validator/Resources/translations/validators.pl.xlf | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Symfony/Component/Validator/Resources/translations/validators.pl.xlf b/src/Symfony/Component/Validator/Resources/translations/validators.pl.xlf index 18db2a41eacfd..42b6e9571b349 100644 --- a/src/Symfony/Component/Validator/Resources/translations/validators.pl.xlf +++ b/src/Symfony/Component/Validator/Resources/translations/validators.pl.xlf @@ -440,7 +440,7 @@ This URL is missing a top-level domain. - Ten URL nie ma domeny najwyższego poziomu. + Podany URL nie zawiera domeny najwyższego poziomu. From f6b4c650d2d548bf966b06090637ebf183387afc Mon Sep 17 00:00:00 2001 From: Neil Peyssard Date: Wed, 17 Apr 2024 14:44:21 +0200 Subject: [PATCH 44/65] [Serializer] Revert #54488 to fix BC Break --- .../Mapping/Loader/AnnotationLoader.php | 2 +- .../Normalizer/ObjectNormalizer.php | 16 ++--- .../Fixtures/SamePropertyAsMethodDummy.php | 48 -------------- ...yAsMethodWithMethodSerializedNameDummy.php | 62 ------------------ ...sMethodWithPropertySerializedNameDummy.php | 65 ------------------- .../Tests/Normalizer/ObjectNormalizerTest.php | 50 -------------- 6 files changed, 5 insertions(+), 238 deletions(-) delete mode 100644 src/Symfony/Component/Serializer/Tests/Fixtures/SamePropertyAsMethodDummy.php delete mode 100644 src/Symfony/Component/Serializer/Tests/Fixtures/SamePropertyAsMethodWithMethodSerializedNameDummy.php delete mode 100644 src/Symfony/Component/Serializer/Tests/Fixtures/SamePropertyAsMethodWithPropertySerializedNameDummy.php diff --git a/src/Symfony/Component/Serializer/Mapping/Loader/AnnotationLoader.php b/src/Symfony/Component/Serializer/Mapping/Loader/AnnotationLoader.php index 82bd3b792c822..0137575cd9445 100644 --- a/src/Symfony/Component/Serializer/Mapping/Loader/AnnotationLoader.php +++ b/src/Symfony/Component/Serializer/Mapping/Loader/AnnotationLoader.php @@ -106,7 +106,7 @@ public function loadClassMetadata(ClassMetadataInterface $classMetadata) $accessorOrMutator = preg_match('/^(get|is|has|set)(.+)$/i', $method->name, $matches); if ($accessorOrMutator) { - $attributeName = $reflectionClass->hasProperty($method->name) ? $method->name : lcfirst($matches[2]); + $attributeName = lcfirst($matches[2]); if (isset($attributesMetadata[$attributeName])) { $attributeMetadata = $attributesMetadata[$attributeName]; diff --git a/src/Symfony/Component/Serializer/Normalizer/ObjectNormalizer.php b/src/Symfony/Component/Serializer/Normalizer/ObjectNormalizer.php index 434b53a87f1dc..a1ab11177482e 100644 --- a/src/Symfony/Component/Serializer/Normalizer/ObjectNormalizer.php +++ b/src/Symfony/Component/Serializer/Normalizer/ObjectNormalizer.php @@ -95,25 +95,17 @@ protected function extractAttributes(object $object, ?string $format = null, arr if (str_starts_with($name, 'get') || str_starts_with($name, 'has')) { // getters and hassers - $attributeName = $name; + $attributeName = substr($name, 3); if (!$reflClass->hasProperty($attributeName)) { - $attributeName = substr($attributeName, 3); - - if (!$reflClass->hasProperty($attributeName)) { - $attributeName = lcfirst($attributeName); - } + $attributeName = lcfirst($attributeName); } } elseif (str_starts_with($name, 'is')) { // issers - $attributeName = $name; + $attributeName = substr($name, 2); if (!$reflClass->hasProperty($attributeName)) { - $attributeName = substr($attributeName, 2); - - if (!$reflClass->hasProperty($attributeName)) { - $attributeName = lcfirst($attributeName); - } + $attributeName = lcfirst($attributeName); } } diff --git a/src/Symfony/Component/Serializer/Tests/Fixtures/SamePropertyAsMethodDummy.php b/src/Symfony/Component/Serializer/Tests/Fixtures/SamePropertyAsMethodDummy.php deleted file mode 100644 index 89c8fcb9c399c..0000000000000 --- a/src/Symfony/Component/Serializer/Tests/Fixtures/SamePropertyAsMethodDummy.php +++ /dev/null @@ -1,48 +0,0 @@ - - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ - -namespace Symfony\Component\Serializer\Tests\Fixtures; - -class SamePropertyAsMethodDummy -{ - private $freeTrial; - private $hasSubscribe; - private $getReady; - private $isActive; - - public function __construct($freeTrial, $hasSubscribe, $getReady, $isActive) - { - $this->freeTrial = $freeTrial; - $this->hasSubscribe = $hasSubscribe; - $this->getReady = $getReady; - $this->isActive = $isActive; - } - - public function getFreeTrial() - { - return $this->freeTrial; - } - - public function hasSubscribe() - { - return $this->hasSubscribe; - } - - public function getReady() - { - return $this->getReady; - } - - public function isActive() - { - return $this->isActive; - } -} diff --git a/src/Symfony/Component/Serializer/Tests/Fixtures/SamePropertyAsMethodWithMethodSerializedNameDummy.php b/src/Symfony/Component/Serializer/Tests/Fixtures/SamePropertyAsMethodWithMethodSerializedNameDummy.php deleted file mode 100644 index b4cf205fd57c8..0000000000000 --- a/src/Symfony/Component/Serializer/Tests/Fixtures/SamePropertyAsMethodWithMethodSerializedNameDummy.php +++ /dev/null @@ -1,62 +0,0 @@ - - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ - -namespace Symfony\Component\Serializer\Tests\Fixtures; - -use Symfony\Component\Serializer\Annotation\SerializedName; - -class SamePropertyAsMethodWithMethodSerializedNameDummy -{ - private $freeTrial; - private $hasSubscribe; - private $getReady; - private $isActive; - - public function __construct($freeTrial, $hasSubscribe, $getReady, $isActive) - { - $this->freeTrial = $freeTrial; - $this->hasSubscribe = $hasSubscribe; - $this->getReady = $getReady; - $this->isActive = $isActive; - } - - /** - * @SerializedName("free_trial_method") - */ - public function getFreeTrial() - { - return $this->freeTrial; - } - - /** - * @SerializedName("has_subscribe_method") - */ - public function hasSubscribe() - { - return $this->hasSubscribe; - } - - /** - * @SerializedName("get_ready_method") - */ - public function getReady() - { - return $this->getReady; - } - - /** - * @SerializedName("is_active_method") - */ - public function isActive() - { - return $this->isActive; - } -} diff --git a/src/Symfony/Component/Serializer/Tests/Fixtures/SamePropertyAsMethodWithPropertySerializedNameDummy.php b/src/Symfony/Component/Serializer/Tests/Fixtures/SamePropertyAsMethodWithPropertySerializedNameDummy.php deleted file mode 100644 index 04dc64a3c71c0..0000000000000 --- a/src/Symfony/Component/Serializer/Tests/Fixtures/SamePropertyAsMethodWithPropertySerializedNameDummy.php +++ /dev/null @@ -1,65 +0,0 @@ - - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ - -namespace Symfony\Component\Serializer\Tests\Fixtures; - -use Symfony\Component\Serializer\Annotation\SerializedName; - -class SamePropertyAsMethodWithPropertySerializedNameDummy -{ - /** - * @SerializedName("free_trial_property") - */ - private $freeTrial; - - /** - * @SerializedName("has_subscribe_property") - */ - private $hasSubscribe; - - /** - * @SerializedName("get_ready_property") - */ - private $getReady; - - /** - * @SerializedName("is_active_property") - */ - private $isActive; - - public function __construct($freeTrial, $hasSubscribe, $getReady, $isActive) - { - $this->freeTrial = $freeTrial; - $this->hasSubscribe = $hasSubscribe; - $this->getReady = $getReady; - $this->isActive = $isActive; - } - - public function getFreeTrial() - { - return $this->freeTrial; - } - - public function hasSubscribe() - { - return $this->hasSubscribe; - } - - public function getReady() - { - return $this->getReady; - } - - public function isActive() - { - return $this->isActive; - } -} diff --git a/src/Symfony/Component/Serializer/Tests/Normalizer/ObjectNormalizerTest.php b/src/Symfony/Component/Serializer/Tests/Normalizer/ObjectNormalizerTest.php index f3ac1ef841c62..830817b8b673b 100644 --- a/src/Symfony/Component/Serializer/Tests/Normalizer/ObjectNormalizerTest.php +++ b/src/Symfony/Component/Serializer/Tests/Normalizer/ObjectNormalizerTest.php @@ -41,9 +41,6 @@ use Symfony\Component\Serializer\Tests\Fixtures\Php74Dummy; use Symfony\Component\Serializer\Tests\Fixtures\Php74DummyPrivate; use Symfony\Component\Serializer\Tests\Fixtures\Php80Dummy; -use Symfony\Component\Serializer\Tests\Fixtures\SamePropertyAsMethodDummy; -use Symfony\Component\Serializer\Tests\Fixtures\SamePropertyAsMethodWithMethodSerializedNameDummy; -use Symfony\Component\Serializer\Tests\Fixtures\SamePropertyAsMethodWithPropertySerializedNameDummy; use Symfony\Component\Serializer\Tests\Fixtures\SiblingHolder; use Symfony\Component\Serializer\Tests\Normalizer\Features\AttributesTestTrait; use Symfony\Component\Serializer\Tests\Normalizer\Features\CacheableObjectAttributesTestTrait; @@ -874,53 +871,6 @@ public function testNormalizeStdClass() $this->assertSame(['baz' => 'baz'], $this->normalizer->normalize($o2)); } - public function testSamePropertyAsMethod() - { - $object = new SamePropertyAsMethodDummy('free_trial', 'has_subscribe', 'get_ready', 'is_active'); - $expected = [ - 'freeTrial' => 'free_trial', - 'hasSubscribe' => 'has_subscribe', - 'getReady' => 'get_ready', - 'isActive' => 'is_active', - ]; - - $this->assertSame($expected, $this->normalizer->normalize($object)); - } - - public function testSamePropertyAsMethodWithPropertySerializedName() - { - $classMetadataFactory = new ClassMetadataFactory(new AnnotationLoader(new AnnotationReader())); - $this->normalizer = new ObjectNormalizer($classMetadataFactory, new MetadataAwareNameConverter($classMetadataFactory)); - $this->normalizer->setSerializer($this->serializer); - - $object = new SamePropertyAsMethodWithPropertySerializedNameDummy('free_trial', 'has_subscribe', 'get_ready', 'is_active'); - $expected = [ - 'free_trial_property' => 'free_trial', - 'has_subscribe_property' => 'has_subscribe', - 'get_ready_property' => 'get_ready', - 'is_active_property' => 'is_active', - ]; - - $this->assertSame($expected, $this->normalizer->normalize($object)); - } - - public function testSamePropertyAsMethodWithMethodSerializedName() - { - $classMetadataFactory = new ClassMetadataFactory(new AnnotationLoader(new AnnotationReader())); - $this->normalizer = new ObjectNormalizer($classMetadataFactory, new MetadataAwareNameConverter($classMetadataFactory)); - $this->normalizer->setSerializer($this->serializer); - - $object = new SamePropertyAsMethodWithMethodSerializedNameDummy('free_trial', 'has_subscribe', 'get_ready', 'is_active'); - $expected = [ - 'free_trial_method' => 'free_trial', - 'has_subscribe_method' => 'has_subscribe', - 'get_ready_method' => 'get_ready', - 'is_active_method' => 'is_active', - ]; - - $this->assertSame($expected, $this->normalizer->normalize($object)); - } - public function testNormalizeWithIgnoreAnnotationAndPrivateProperties() { $classMetadataFactory = new ClassMetadataFactory(new AnnotationLoader(new AnnotationReader())); From 8b3bf65577d62b0bdb4aac8f0a43095e4ff990e6 Mon Sep 17 00:00:00 2001 From: Nicolas Grekas Date: Wed, 17 Apr 2024 15:57:06 +0200 Subject: [PATCH 45/65] [Messenger] Fix reading pending messages with Redis --- .../Component/Messenger/Bridge/Redis/Transport/Connection.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Symfony/Component/Messenger/Bridge/Redis/Transport/Connection.php b/src/Symfony/Component/Messenger/Bridge/Redis/Transport/Connection.php index f0c7188b3754e..a5e1c21707a78 100644 --- a/src/Symfony/Component/Messenger/Bridge/Redis/Transport/Connection.php +++ b/src/Symfony/Component/Messenger/Bridge/Redis/Transport/Connection.php @@ -304,7 +304,7 @@ private function claimOldPendingMessages() try { // This could soon be optimized with https://github.com/antirez/redis/issues/5212 or // https://github.com/antirez/redis/issues/6256 - $pendingMessages = $this->connection->xpending($this->stream, $this->group, '-', '+', 1); + $pendingMessages = $this->connection->xpending($this->stream, $this->group, '-', '+', 1) ?: []; } catch (\RedisException $e) { throw new TransportException($e->getMessage(), 0, $e); } From 805fa9e3584b53e95a8a3c76bf5a4bcf622a8d7c Mon Sep 17 00:00:00 2001 From: Christian Flothmann Date: Thu, 18 Apr 2024 08:42:37 +0200 Subject: [PATCH 46/65] review German translation --- .../Validator/Resources/translations/validators.de.xlf | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Symfony/Component/Validator/Resources/translations/validators.de.xlf b/src/Symfony/Component/Validator/Resources/translations/validators.de.xlf index 57a82c22b3775..3b65306314922 100644 --- a/src/Symfony/Component/Validator/Resources/translations/validators.de.xlf +++ b/src/Symfony/Component/Validator/Resources/translations/validators.de.xlf @@ -440,7 +440,7 @@ This URL is missing a top-level domain. - Dieser URL fehlt eine Top-Level-Domain. + Dieser URL fehlt eine Top-Level-Domain. From d5c8b996913a9360489b495b122cb709e1dcf661 Mon Sep 17 00:00:00 2001 From: Nicolas Grekas Date: Thu, 18 Apr 2024 09:55:03 +0200 Subject: [PATCH 47/65] Auto-close PRs on subtree-splits --- .gitattributes | 1 + .github/sync-packages.php | 75 +++++++++++++++++++ .github/workflows/integration-tests.yml | 2 +- .github/workflows/package-tests.yml | 7 ++ src/Symfony/Bridge/Doctrine/.gitattributes | 3 +- .../Doctrine/.github/PULL_REQUEST_TEMPLATE.md | 8 ++ .../.github/workflows/check-subtree-split.yml | 37 +++++++++ src/Symfony/Bridge/Monolog/.gitattributes | 3 +- .../Monolog/.github/PULL_REQUEST_TEMPLATE.md | 8 ++ .../.github/workflows/check-subtree-split.yml | 37 +++++++++ src/Symfony/Bridge/PhpUnit/.gitattributes | 3 +- .../PhpUnit/.github/PULL_REQUEST_TEMPLATE.md | 8 ++ .../.github/workflows/check-subtree-split.yml | 37 +++++++++ .../Bridge/ProxyManager/.gitattributes | 3 +- .../.github/PULL_REQUEST_TEMPLATE.md | 8 ++ .../.github/workflows/check-subtree-split.yml | 37 +++++++++ src/Symfony/Bridge/Twig/.gitattributes | 3 +- .../Twig/.github/PULL_REQUEST_TEMPLATE.md | 8 ++ .../.github/workflows/check-subtree-split.yml | 37 +++++++++ src/Symfony/Bundle/DebugBundle/.gitattributes | 3 +- .../.github/PULL_REQUEST_TEMPLATE.md | 8 ++ .../.github/workflows/check-subtree-split.yml | 37 +++++++++ .../Bundle/FrameworkBundle/.gitattributes | 3 +- .../.github/PULL_REQUEST_TEMPLATE.md | 8 ++ .../.github/workflows/check-subtree-split.yml | 37 +++++++++ .../Bundle/SecurityBundle/.gitattributes | 3 +- .../.github/PULL_REQUEST_TEMPLATE.md | 8 ++ .../.github/workflows/check-subtree-split.yml | 37 +++++++++ src/Symfony/Bundle/TwigBundle/.gitattributes | 3 +- .../.github/PULL_REQUEST_TEMPLATE.md | 8 ++ .../.github/workflows/check-subtree-split.yml | 37 +++++++++ .../Bundle/WebProfilerBundle/.gitattributes | 3 +- .../.github/PULL_REQUEST_TEMPLATE.md | 8 ++ .../.github/workflows/check-subtree-split.yml | 37 +++++++++ src/Symfony/Component/Asset/.gitattributes | 3 +- .../Asset/.github/PULL_REQUEST_TEMPLATE.md | 8 ++ .../.github/workflows/check-subtree-split.yml | 37 +++++++++ .../Component/BrowserKit/.gitattributes | 3 +- .../.github/PULL_REQUEST_TEMPLATE.md | 8 ++ .../.github/workflows/check-subtree-split.yml | 37 +++++++++ src/Symfony/Component/Cache/.gitattributes | 3 +- .../Cache/.github/PULL_REQUEST_TEMPLATE.md | 8 ++ .../.github/workflows/check-subtree-split.yml | 37 +++++++++ src/Symfony/Component/Config/.gitattributes | 3 +- .../Config/.github/PULL_REQUEST_TEMPLATE.md | 8 ++ .../.github/workflows/check-subtree-split.yml | 37 +++++++++ src/Symfony/Component/Console/.gitattributes | 3 +- .../Console/.github/PULL_REQUEST_TEMPLATE.md | 8 ++ .../.github/workflows/check-subtree-split.yml | 37 +++++++++ .../Component/CssSelector/.gitattributes | 3 +- .../.github/PULL_REQUEST_TEMPLATE.md | 8 ++ .../.github/workflows/check-subtree-split.yml | 37 +++++++++ .../DependencyInjection/.gitattributes | 3 +- .../.github/PULL_REQUEST_TEMPLATE.md | 8 ++ .../.github/workflows/check-subtree-split.yml | 37 +++++++++ .../Component/DomCrawler/.gitattributes | 3 +- .../.github/PULL_REQUEST_TEMPLATE.md | 8 ++ .../.github/workflows/check-subtree-split.yml | 37 +++++++++ src/Symfony/Component/Dotenv/.gitattributes | 3 +- .../Dotenv/.github/PULL_REQUEST_TEMPLATE.md | 8 ++ .../.github/workflows/check-subtree-split.yml | 37 +++++++++ .../Component/ErrorHandler/.gitattributes | 3 +- .../.github/PULL_REQUEST_TEMPLATE.md | 8 ++ .../.github/workflows/check-subtree-split.yml | 37 +++++++++ .../Component/EventDispatcher/.gitattributes | 3 +- .../.github/PULL_REQUEST_TEMPLATE.md | 8 ++ .../.github/workflows/check-subtree-split.yml | 37 +++++++++ .../ExpressionLanguage/.gitattributes | 3 +- .../.github/PULL_REQUEST_TEMPLATE.md | 8 ++ .../.github/workflows/check-subtree-split.yml | 37 +++++++++ .../Component/Filesystem/.gitattributes | 3 +- .../.github/PULL_REQUEST_TEMPLATE.md | 8 ++ .../.github/workflows/check-subtree-split.yml | 37 +++++++++ src/Symfony/Component/Finder/.gitattributes | 3 +- .../Finder/.github/PULL_REQUEST_TEMPLATE.md | 8 ++ .../.github/workflows/check-subtree-split.yml | 37 +++++++++ src/Symfony/Component/Form/.gitattributes | 3 +- .../Form/.github/PULL_REQUEST_TEMPLATE.md | 8 ++ .../.github/workflows/check-subtree-split.yml | 37 +++++++++ .../Component/HttpClient/.gitattributes | 3 +- .../.github/PULL_REQUEST_TEMPLATE.md | 8 ++ .../.github/workflows/check-subtree-split.yml | 37 +++++++++ .../Component/HttpFoundation/.gitattributes | 3 +- .../.github/PULL_REQUEST_TEMPLATE.md | 8 ++ .../.github/workflows/check-subtree-split.yml | 37 +++++++++ .../Component/HttpKernel/.gitattributes | 3 +- .../.github/PULL_REQUEST_TEMPLATE.md | 8 ++ .../.github/workflows/check-subtree-split.yml | 37 +++++++++ .../Component/Inflector/.gitattributes | 3 +- .../.github/PULL_REQUEST_TEMPLATE.md | 8 ++ .../.github/workflows/check-subtree-split.yml | 37 +++++++++ src/Symfony/Component/Intl/.gitattributes | 3 +- .../Intl/.github/PULL_REQUEST_TEMPLATE.md | 8 ++ .../.github/workflows/check-subtree-split.yml | 37 +++++++++ src/Symfony/Component/Ldap/.gitattributes | 3 +- .../Ldap/.github/PULL_REQUEST_TEMPLATE.md | 8 ++ .../.github/workflows/check-subtree-split.yml | 37 +++++++++ src/Symfony/Component/Lock/.gitattributes | 3 +- .../Lock/.github/PULL_REQUEST_TEMPLATE.md | 8 ++ .../.github/workflows/check-subtree-split.yml | 37 +++++++++ src/Symfony/Component/Mailer/.gitattributes | 3 +- .../Mailer/.github/PULL_REQUEST_TEMPLATE.md | 8 ++ .../.github/workflows/check-subtree-split.yml | 37 +++++++++ .../Mailer/Bridge/Amazon/.gitattributes | 3 +- .../Amazon/.github/PULL_REQUEST_TEMPLATE.md | 8 ++ .../.github/workflows/check-subtree-split.yml | 37 +++++++++ .../Mailer/Bridge/Google/.gitattributes | 3 +- .../Google/.github/PULL_REQUEST_TEMPLATE.md | 8 ++ .../.github/workflows/check-subtree-split.yml | 37 +++++++++ .../Mailer/Bridge/Mailchimp/.gitattributes | 3 +- .../.github/PULL_REQUEST_TEMPLATE.md | 8 ++ .../.github/workflows/check-subtree-split.yml | 37 +++++++++ .../Mailer/Bridge/Mailgun/.gitattributes | 3 +- .../Mailgun/.github/PULL_REQUEST_TEMPLATE.md | 8 ++ .../.github/workflows/check-subtree-split.yml | 37 +++++++++ .../Mailer/Bridge/Mailjet/.gitattributes | 3 +- .../Mailjet/.github/PULL_REQUEST_TEMPLATE.md | 8 ++ .../.github/workflows/check-subtree-split.yml | 37 +++++++++ .../Mailer/Bridge/OhMySmtp/.gitattributes | 3 +- .../OhMySmtp/.github/PULL_REQUEST_TEMPLATE.md | 8 ++ .../.github/workflows/check-subtree-split.yml | 37 +++++++++ .../Mailer/Bridge/Postmark/.gitattributes | 3 +- .../Postmark/.github/PULL_REQUEST_TEMPLATE.md | 8 ++ .../.github/workflows/check-subtree-split.yml | 37 +++++++++ .../Mailer/Bridge/Sendgrid/.gitattributes | 3 +- .../Sendgrid/.github/PULL_REQUEST_TEMPLATE.md | 8 ++ .../.github/workflows/check-subtree-split.yml | 37 +++++++++ .../Mailer/Bridge/Sendinblue/.gitattributes | 3 +- .../.github/PULL_REQUEST_TEMPLATE.md | 8 ++ .../.github/workflows/check-subtree-split.yml | 37 +++++++++ .../Component/Messenger/.gitattributes | 3 +- .../.github/PULL_REQUEST_TEMPLATE.md | 8 ++ .../.github/workflows/check-subtree-split.yml | 37 +++++++++ .../Messenger/Bridge/AmazonSqs/.gitattributes | 3 +- .../.github/PULL_REQUEST_TEMPLATE.md | 8 ++ .../.github/workflows/check-subtree-split.yml | 37 +++++++++ .../Messenger/Bridge/Amqp/.gitattributes | 3 +- .../Amqp/.github/PULL_REQUEST_TEMPLATE.md | 8 ++ .../.github/workflows/check-subtree-split.yml | 37 +++++++++ .../Bridge/Beanstalkd/.gitattributes | 3 +- .../.github/PULL_REQUEST_TEMPLATE.md | 8 ++ .../.github/workflows/check-subtree-split.yml | 37 +++++++++ .../Messenger/Bridge/Doctrine/.gitattributes | 3 +- .../Doctrine/.github/PULL_REQUEST_TEMPLATE.md | 8 ++ .../.github/workflows/check-subtree-split.yml | 37 +++++++++ .../Messenger/Bridge/Redis/.gitattributes | 3 +- .../Redis/.github/PULL_REQUEST_TEMPLATE.md | 8 ++ .../.github/workflows/check-subtree-split.yml | 37 +++++++++ src/Symfony/Component/Mime/.gitattributes | 3 +- .../Mime/.github/PULL_REQUEST_TEMPLATE.md | 8 ++ .../.github/workflows/check-subtree-split.yml | 37 +++++++++ src/Symfony/Component/Notifier/.gitattributes | 3 +- .../Notifier/.github/PULL_REQUEST_TEMPLATE.md | 8 ++ .../.github/workflows/check-subtree-split.yml | 37 +++++++++ .../Notifier/Bridge/AllMySms/.gitattributes | 3 +- .../AllMySms/.github/PULL_REQUEST_TEMPLATE.md | 8 ++ .../.github/workflows/check-subtree-split.yml | 37 +++++++++ .../Notifier/Bridge/AmazonSns/.gitattributes | 3 +- .../.github/PULL_REQUEST_TEMPLATE.md | 8 ++ .../.github/workflows/check-subtree-split.yml | 37 +++++++++ .../Notifier/Bridge/Clickatell/.gitattributes | 3 +- .../.github/PULL_REQUEST_TEMPLATE.md | 8 ++ .../.github/workflows/check-subtree-split.yml | 37 +++++++++ .../Notifier/Bridge/Discord/.gitattributes | 3 +- .../Discord/.github/PULL_REQUEST_TEMPLATE.md | 8 ++ .../.github/workflows/check-subtree-split.yml | 37 +++++++++ .../Notifier/Bridge/Esendex/.gitattributes | 3 +- .../Esendex/.github/PULL_REQUEST_TEMPLATE.md | 8 ++ .../.github/workflows/check-subtree-split.yml | 37 +++++++++ .../Notifier/Bridge/Expo/.gitattributes | 3 +- .../Expo/.github/PULL_REQUEST_TEMPLATE.md | 8 ++ .../.github/workflows/check-subtree-split.yml | 37 +++++++++ .../Notifier/Bridge/FakeChat/.gitattributes | 3 +- .../FakeChat/.github/PULL_REQUEST_TEMPLATE.md | 8 ++ .../.github/workflows/check-subtree-split.yml | 37 +++++++++ .../Notifier/Bridge/FakeSms/.gitattributes | 3 +- .../FakeSms/.github/PULL_REQUEST_TEMPLATE.md | 8 ++ .../.github/workflows/check-subtree-split.yml | 37 +++++++++ .../Notifier/Bridge/Firebase/.gitattributes | 3 +- .../Firebase/.github/PULL_REQUEST_TEMPLATE.md | 8 ++ .../.github/workflows/check-subtree-split.yml | 37 +++++++++ .../Notifier/Bridge/FreeMobile/.gitattributes | 3 +- .../.github/PULL_REQUEST_TEMPLATE.md | 8 ++ .../.github/workflows/check-subtree-split.yml | 37 +++++++++ .../Notifier/Bridge/GatewayApi/.gitattributes | 3 +- .../.github/PULL_REQUEST_TEMPLATE.md | 8 ++ .../.github/workflows/check-subtree-split.yml | 37 +++++++++ .../Notifier/Bridge/Gitter/.gitattributes | 3 +- .../Gitter/.github/PULL_REQUEST_TEMPLATE.md | 8 ++ .../.github/workflows/check-subtree-split.yml | 37 +++++++++ .../Notifier/Bridge/GoogleChat/.gitattributes | 3 +- .../.github/PULL_REQUEST_TEMPLATE.md | 8 ++ .../.github/workflows/check-subtree-split.yml | 37 +++++++++ .../Notifier/Bridge/Infobip/.gitattributes | 3 +- .../Infobip/.github/PULL_REQUEST_TEMPLATE.md | 8 ++ .../.github/workflows/check-subtree-split.yml | 37 +++++++++ .../Notifier/Bridge/Iqsms/.gitattributes | 3 +- .../Iqsms/.github/PULL_REQUEST_TEMPLATE.md | 8 ++ .../.github/workflows/check-subtree-split.yml | 37 +++++++++ .../Notifier/Bridge/LightSms/.gitattributes | 3 +- .../LightSms/.github/PULL_REQUEST_TEMPLATE.md | 8 ++ .../.github/workflows/check-subtree-split.yml | 37 +++++++++ .../Notifier/Bridge/LinkedIn/.gitattributes | 3 +- .../LinkedIn/.github/PULL_REQUEST_TEMPLATE.md | 8 ++ .../.github/workflows/check-subtree-split.yml | 37 +++++++++ .../Notifier/Bridge/Mailjet/.gitattributes | 3 +- .../Mailjet/.github/PULL_REQUEST_TEMPLATE.md | 8 ++ .../.github/workflows/check-subtree-split.yml | 37 +++++++++ .../Notifier/Bridge/Mattermost/.gitattributes | 3 +- .../.github/PULL_REQUEST_TEMPLATE.md | 8 ++ .../.github/workflows/check-subtree-split.yml | 37 +++++++++ .../Notifier/Bridge/Mercure/.gitattributes | 3 +- .../Mercure/.github/PULL_REQUEST_TEMPLATE.md | 8 ++ .../.github/workflows/check-subtree-split.yml | 37 +++++++++ .../Bridge/MessageBird/.gitattributes | 3 +- .../.github/PULL_REQUEST_TEMPLATE.md | 8 ++ .../.github/workflows/check-subtree-split.yml | 37 +++++++++ .../Bridge/MessageMedia/.gitattributes | 3 +- .../.github/PULL_REQUEST_TEMPLATE.md | 8 ++ .../.github/workflows/check-subtree-split.yml | 37 +++++++++ .../Bridge/MicrosoftTeams/.gitattributes | 3 +- .../.github/PULL_REQUEST_TEMPLATE.md | 8 ++ .../.github/workflows/check-subtree-split.yml | 37 +++++++++ .../Notifier/Bridge/Mobyt/.gitattributes | 3 +- .../Mobyt/.github/PULL_REQUEST_TEMPLATE.md | 8 ++ .../.github/workflows/check-subtree-split.yml | 37 +++++++++ .../Notifier/Bridge/Nexmo/.gitattributes | 3 +- .../Nexmo/.github/PULL_REQUEST_TEMPLATE.md | 8 ++ .../.github/workflows/check-subtree-split.yml | 37 +++++++++ .../Notifier/Bridge/Octopush/.gitattributes | 3 +- .../Octopush/.github/PULL_REQUEST_TEMPLATE.md | 8 ++ .../.github/workflows/check-subtree-split.yml | 37 +++++++++ .../Notifier/Bridge/OneSignal/.gitattributes | 3 +- .../.github/PULL_REQUEST_TEMPLATE.md | 8 ++ .../.github/workflows/check-subtree-split.yml | 37 +++++++++ .../Notifier/Bridge/OvhCloud/.gitattributes | 3 +- .../OvhCloud/.github/PULL_REQUEST_TEMPLATE.md | 8 ++ .../.github/workflows/check-subtree-split.yml | 37 +++++++++ .../Notifier/Bridge/RocketChat/.gitattributes | 3 +- .../.github/PULL_REQUEST_TEMPLATE.md | 8 ++ .../.github/workflows/check-subtree-split.yml | 37 +++++++++ .../Notifier/Bridge/Sendinblue/.gitattributes | 3 +- .../.github/PULL_REQUEST_TEMPLATE.md | 8 ++ .../.github/workflows/check-subtree-split.yml | 37 +++++++++ .../Notifier/Bridge/Sinch/.gitattributes | 3 +- .../Sinch/.github/PULL_REQUEST_TEMPLATE.md | 8 ++ .../.github/workflows/check-subtree-split.yml | 37 +++++++++ .../Notifier/Bridge/Slack/.gitattributes | 3 +- .../Slack/.github/PULL_REQUEST_TEMPLATE.md | 8 ++ .../.github/workflows/check-subtree-split.yml | 37 +++++++++ .../Notifier/Bridge/Sms77/.gitattributes | 3 +- .../Sms77/.github/PULL_REQUEST_TEMPLATE.md | 8 ++ .../.github/workflows/check-subtree-split.yml | 37 +++++++++ .../Notifier/Bridge/SmsBiuras/.gitattributes | 3 +- .../.github/PULL_REQUEST_TEMPLATE.md | 8 ++ .../.github/workflows/check-subtree-split.yml | 37 +++++++++ .../Notifier/Bridge/Smsapi/.gitattributes | 3 +- .../Smsapi/.github/PULL_REQUEST_TEMPLATE.md | 8 ++ .../.github/workflows/check-subtree-split.yml | 37 +++++++++ .../Notifier/Bridge/Smsc/.gitattributes | 3 +- .../Smsc/.github/PULL_REQUEST_TEMPLATE.md | 8 ++ .../.github/workflows/check-subtree-split.yml | 37 +++++++++ .../Notifier/Bridge/SpotHit/.gitattributes | 3 +- .../SpotHit/.github/PULL_REQUEST_TEMPLATE.md | 8 ++ .../.github/workflows/check-subtree-split.yml | 37 +++++++++ .../Notifier/Bridge/Telegram/.gitattributes | 3 +- .../Telegram/.github/PULL_REQUEST_TEMPLATE.md | 8 ++ .../.github/workflows/check-subtree-split.yml | 37 +++++++++ .../Notifier/Bridge/Telnyx/.gitattributes | 3 +- .../Telnyx/.github/PULL_REQUEST_TEMPLATE.md | 8 ++ .../.github/workflows/check-subtree-split.yml | 37 +++++++++ .../Notifier/Bridge/TurboSms/.gitattributes | 3 +- .../TurboSms/.github/PULL_REQUEST_TEMPLATE.md | 8 ++ .../.github/workflows/check-subtree-split.yml | 37 +++++++++ .../Notifier/Bridge/Twilio/.gitattributes | 3 +- .../Twilio/.github/PULL_REQUEST_TEMPLATE.md | 8 ++ .../.github/workflows/check-subtree-split.yml | 37 +++++++++ .../Notifier/Bridge/Vonage/.gitattributes | 3 +- .../Vonage/.github/PULL_REQUEST_TEMPLATE.md | 8 ++ .../.github/workflows/check-subtree-split.yml | 37 +++++++++ .../Notifier/Bridge/Yunpian/.gitattributes | 3 +- .../Yunpian/.github/PULL_REQUEST_TEMPLATE.md | 8 ++ .../.github/workflows/check-subtree-split.yml | 37 +++++++++ .../Notifier/Bridge/Zulip/.gitattributes | 3 +- .../Zulip/.github/PULL_REQUEST_TEMPLATE.md | 8 ++ .../.github/workflows/check-subtree-split.yml | 37 +++++++++ .../Component/OptionsResolver/.gitattributes | 3 +- .../.github/PULL_REQUEST_TEMPLATE.md | 8 ++ .../.github/workflows/check-subtree-split.yml | 37 +++++++++ .../Component/PasswordHasher/.gitattributes | 3 +- .../.github/PULL_REQUEST_TEMPLATE.md | 8 ++ .../.github/workflows/check-subtree-split.yml | 37 +++++++++ src/Symfony/Component/Process/.gitattributes | 3 +- .../Process/.github/PULL_REQUEST_TEMPLATE.md | 8 ++ .../.github/workflows/check-subtree-split.yml | 37 +++++++++ .../Component/PropertyAccess/.gitattributes | 3 +- .../.github/PULL_REQUEST_TEMPLATE.md | 8 ++ .../.github/workflows/check-subtree-split.yml | 37 +++++++++ .../Component/PropertyInfo/.gitattributes | 3 +- .../.github/PULL_REQUEST_TEMPLATE.md | 8 ++ .../.github/workflows/check-subtree-split.yml | 37 +++++++++ .../Component/RateLimiter/.gitattributes | 3 +- .../.github/PULL_REQUEST_TEMPLATE.md | 8 ++ .../.github/workflows/check-subtree-split.yml | 37 +++++++++ src/Symfony/Component/Routing/.gitattributes | 3 +- .../Routing/.github/PULL_REQUEST_TEMPLATE.md | 8 ++ .../.github/workflows/check-subtree-split.yml | 37 +++++++++ src/Symfony/Component/Runtime/.gitattributes | 3 +- .../Runtime/.github/PULL_REQUEST_TEMPLATE.md | 8 ++ .../.github/workflows/check-subtree-split.yml | 37 +++++++++ .../Component/Security/Core/.gitattributes | 3 +- .../Core/.github/PULL_REQUEST_TEMPLATE.md | 8 ++ .../.github/workflows/check-subtree-split.yml | 37 +++++++++ .../Component/Security/Csrf/.gitattributes | 3 +- .../Csrf/.github/PULL_REQUEST_TEMPLATE.md | 8 ++ .../.github/workflows/check-subtree-split.yml | 37 +++++++++ .../Component/Security/Guard/.gitattributes | 3 +- .../Guard/.github/PULL_REQUEST_TEMPLATE.md | 8 ++ .../.github/workflows/check-subtree-split.yml | 37 +++++++++ .../Component/Security/Http/.gitattributes | 3 +- .../Http/.github/PULL_REQUEST_TEMPLATE.md | 8 ++ .../.github/workflows/check-subtree-split.yml | 37 +++++++++ .../Component/Semaphore/.gitattributes | 3 +- .../.github/PULL_REQUEST_TEMPLATE.md | 8 ++ .../.github/workflows/check-subtree-split.yml | 37 +++++++++ .../Component/Serializer/.gitattributes | 3 +- .../.github/PULL_REQUEST_TEMPLATE.md | 8 ++ .../.github/workflows/check-subtree-split.yml | 37 +++++++++ .../Component/Stopwatch/.gitattributes | 3 +- .../.github/PULL_REQUEST_TEMPLATE.md | 8 ++ .../.github/workflows/check-subtree-split.yml | 37 +++++++++ src/Symfony/Component/String/.gitattributes | 3 +- .../String/.github/PULL_REQUEST_TEMPLATE.md | 8 ++ .../.github/workflows/check-subtree-split.yml | 37 +++++++++ .../Component/Templating/.gitattributes | 3 +- .../.github/PULL_REQUEST_TEMPLATE.md | 8 ++ .../.github/workflows/check-subtree-split.yml | 37 +++++++++ .../Component/Translation/.gitattributes | 3 +- .../.github/PULL_REQUEST_TEMPLATE.md | 8 ++ .../.github/workflows/check-subtree-split.yml | 37 +++++++++ .../Translation/Bridge/Crowdin/.gitattributes | 3 +- .../Crowdin/.github/PULL_REQUEST_TEMPLATE.md | 8 ++ .../.github/workflows/check-subtree-split.yml | 37 +++++++++ .../Translation/Bridge/Loco/.gitattributes | 3 +- .../Loco/.github/PULL_REQUEST_TEMPLATE.md | 8 ++ .../.github/workflows/check-subtree-split.yml | 37 +++++++++ .../Bridge/Lokalise/.gitattributes | 3 +- .../Lokalise/.github/PULL_REQUEST_TEMPLATE.md | 8 ++ .../.github/workflows/check-subtree-split.yml | 37 +++++++++ src/Symfony/Component/Uid/.gitattributes | 3 +- .../Uid/.github/PULL_REQUEST_TEMPLATE.md | 8 ++ .../.github/workflows/check-subtree-split.yml | 37 +++++++++ .../Component/Validator/.gitattributes | 3 +- .../.github/PULL_REQUEST_TEMPLATE.md | 8 ++ .../.github/workflows/check-subtree-split.yml | 37 +++++++++ .../Component/VarDumper/.gitattributes | 3 +- .../.github/PULL_REQUEST_TEMPLATE.md | 8 ++ .../.github/workflows/check-subtree-split.yml | 37 +++++++++ .../Component/VarExporter/.gitattributes | 3 +- .../.github/PULL_REQUEST_TEMPLATE.md | 8 ++ .../.github/workflows/check-subtree-split.yml | 37 +++++++++ src/Symfony/Component/WebLink/.gitattributes | 3 +- .../WebLink/.github/PULL_REQUEST_TEMPLATE.md | 8 ++ .../.github/workflows/check-subtree-split.yml | 37 +++++++++ src/Symfony/Component/Workflow/.gitattributes | 3 +- .../Workflow/.github/PULL_REQUEST_TEMPLATE.md | 8 ++ .../.github/workflows/check-subtree-split.yml | 37 +++++++++ src/Symfony/Component/Yaml/.gitattributes | 3 +- .../Yaml/.github/PULL_REQUEST_TEMPLATE.md | 8 ++ .../.github/workflows/check-subtree-split.yml | 37 +++++++++ src/Symfony/Contracts/.gitattributes | 1 + .../.github/PULL_REQUEST_TEMPLATE.md | 8 ++ .../.github/workflows/check-subtree-split.yml | 37 +++++++++ src/Symfony/Contracts/Cache/.gitattributes | 1 + .../Cache/.github/PULL_REQUEST_TEMPLATE.md | 8 ++ .../.github/workflows/check-subtree-split.yml | 37 +++++++++ .../Contracts/Deprecation/.gitattributes | 1 + .../.github/PULL_REQUEST_TEMPLATE.md | 8 ++ .../.github/workflows/check-subtree-split.yml | 37 +++++++++ .../Contracts/EventDispatcher/.gitattributes | 1 + .../.github/PULL_REQUEST_TEMPLATE.md | 8 ++ .../.github/workflows/check-subtree-split.yml | 37 +++++++++ .../Contracts/HttpClient/.gitattributes | 1 + .../.github/PULL_REQUEST_TEMPLATE.md | 8 ++ .../.github/workflows/check-subtree-split.yml | 37 +++++++++ src/Symfony/Contracts/Service/.gitattributes | 1 + .../Service/.github/PULL_REQUEST_TEMPLATE.md | 8 ++ .../.github/workflows/check-subtree-split.yml | 37 +++++++++ .../Contracts/Translation/.gitattributes | 1 + .../.github/PULL_REQUEST_TEMPLATE.md | 8 ++ .../.github/workflows/check-subtree-split.yml | 37 +++++++++ 391 files changed, 6018 insertions(+), 245 deletions(-) create mode 100644 .github/sync-packages.php create mode 100644 src/Symfony/Bridge/Doctrine/.github/PULL_REQUEST_TEMPLATE.md create mode 100644 src/Symfony/Bridge/Doctrine/.github/workflows/check-subtree-split.yml create mode 100644 src/Symfony/Bridge/Monolog/.github/PULL_REQUEST_TEMPLATE.md create mode 100644 src/Symfony/Bridge/Monolog/.github/workflows/check-subtree-split.yml create mode 100644 src/Symfony/Bridge/PhpUnit/.github/PULL_REQUEST_TEMPLATE.md create mode 100644 src/Symfony/Bridge/PhpUnit/.github/workflows/check-subtree-split.yml create mode 100644 src/Symfony/Bridge/ProxyManager/.github/PULL_REQUEST_TEMPLATE.md create mode 100644 src/Symfony/Bridge/ProxyManager/.github/workflows/check-subtree-split.yml create mode 100644 src/Symfony/Bridge/Twig/.github/PULL_REQUEST_TEMPLATE.md create mode 100644 src/Symfony/Bridge/Twig/.github/workflows/check-subtree-split.yml create mode 100644 src/Symfony/Bundle/DebugBundle/.github/PULL_REQUEST_TEMPLATE.md create mode 100644 src/Symfony/Bundle/DebugBundle/.github/workflows/check-subtree-split.yml create mode 100644 src/Symfony/Bundle/FrameworkBundle/.github/PULL_REQUEST_TEMPLATE.md create mode 100644 src/Symfony/Bundle/FrameworkBundle/.github/workflows/check-subtree-split.yml create mode 100644 src/Symfony/Bundle/SecurityBundle/.github/PULL_REQUEST_TEMPLATE.md create mode 100644 src/Symfony/Bundle/SecurityBundle/.github/workflows/check-subtree-split.yml create mode 100644 src/Symfony/Bundle/TwigBundle/.github/PULL_REQUEST_TEMPLATE.md create mode 100644 src/Symfony/Bundle/TwigBundle/.github/workflows/check-subtree-split.yml create mode 100644 src/Symfony/Bundle/WebProfilerBundle/.github/PULL_REQUEST_TEMPLATE.md create mode 100644 src/Symfony/Bundle/WebProfilerBundle/.github/workflows/check-subtree-split.yml create mode 100644 src/Symfony/Component/Asset/.github/PULL_REQUEST_TEMPLATE.md create mode 100644 src/Symfony/Component/Asset/.github/workflows/check-subtree-split.yml create mode 100644 src/Symfony/Component/BrowserKit/.github/PULL_REQUEST_TEMPLATE.md create mode 100644 src/Symfony/Component/BrowserKit/.github/workflows/check-subtree-split.yml create mode 100644 src/Symfony/Component/Cache/.github/PULL_REQUEST_TEMPLATE.md create mode 100644 src/Symfony/Component/Cache/.github/workflows/check-subtree-split.yml create mode 100644 src/Symfony/Component/Config/.github/PULL_REQUEST_TEMPLATE.md create mode 100644 src/Symfony/Component/Config/.github/workflows/check-subtree-split.yml create mode 100644 src/Symfony/Component/Console/.github/PULL_REQUEST_TEMPLATE.md create mode 100644 src/Symfony/Component/Console/.github/workflows/check-subtree-split.yml create mode 100644 src/Symfony/Component/CssSelector/.github/PULL_REQUEST_TEMPLATE.md create mode 100644 src/Symfony/Component/CssSelector/.github/workflows/check-subtree-split.yml create mode 100644 src/Symfony/Component/DependencyInjection/.github/PULL_REQUEST_TEMPLATE.md create mode 100644 src/Symfony/Component/DependencyInjection/.github/workflows/check-subtree-split.yml create mode 100644 src/Symfony/Component/DomCrawler/.github/PULL_REQUEST_TEMPLATE.md create mode 100644 src/Symfony/Component/DomCrawler/.github/workflows/check-subtree-split.yml create mode 100644 src/Symfony/Component/Dotenv/.github/PULL_REQUEST_TEMPLATE.md create mode 100644 src/Symfony/Component/Dotenv/.github/workflows/check-subtree-split.yml create mode 100644 src/Symfony/Component/ErrorHandler/.github/PULL_REQUEST_TEMPLATE.md create mode 100644 src/Symfony/Component/ErrorHandler/.github/workflows/check-subtree-split.yml create mode 100644 src/Symfony/Component/EventDispatcher/.github/PULL_REQUEST_TEMPLATE.md create mode 100644 src/Symfony/Component/EventDispatcher/.github/workflows/check-subtree-split.yml create mode 100644 src/Symfony/Component/ExpressionLanguage/.github/PULL_REQUEST_TEMPLATE.md create mode 100644 src/Symfony/Component/ExpressionLanguage/.github/workflows/check-subtree-split.yml create mode 100644 src/Symfony/Component/Filesystem/.github/PULL_REQUEST_TEMPLATE.md create mode 100644 src/Symfony/Component/Filesystem/.github/workflows/check-subtree-split.yml create mode 100644 src/Symfony/Component/Finder/.github/PULL_REQUEST_TEMPLATE.md create mode 100644 src/Symfony/Component/Finder/.github/workflows/check-subtree-split.yml create mode 100644 src/Symfony/Component/Form/.github/PULL_REQUEST_TEMPLATE.md create mode 100644 src/Symfony/Component/Form/.github/workflows/check-subtree-split.yml create mode 100644 src/Symfony/Component/HttpClient/.github/PULL_REQUEST_TEMPLATE.md create mode 100644 src/Symfony/Component/HttpClient/.github/workflows/check-subtree-split.yml create mode 100644 src/Symfony/Component/HttpFoundation/.github/PULL_REQUEST_TEMPLATE.md create mode 100644 src/Symfony/Component/HttpFoundation/.github/workflows/check-subtree-split.yml create mode 100644 src/Symfony/Component/HttpKernel/.github/PULL_REQUEST_TEMPLATE.md create mode 100644 src/Symfony/Component/HttpKernel/.github/workflows/check-subtree-split.yml create mode 100644 src/Symfony/Component/Inflector/.github/PULL_REQUEST_TEMPLATE.md create mode 100644 src/Symfony/Component/Inflector/.github/workflows/check-subtree-split.yml create mode 100644 src/Symfony/Component/Intl/.github/PULL_REQUEST_TEMPLATE.md create mode 100644 src/Symfony/Component/Intl/.github/workflows/check-subtree-split.yml create mode 100644 src/Symfony/Component/Ldap/.github/PULL_REQUEST_TEMPLATE.md create mode 100644 src/Symfony/Component/Ldap/.github/workflows/check-subtree-split.yml create mode 100644 src/Symfony/Component/Lock/.github/PULL_REQUEST_TEMPLATE.md create mode 100644 src/Symfony/Component/Lock/.github/workflows/check-subtree-split.yml create mode 100644 src/Symfony/Component/Mailer/.github/PULL_REQUEST_TEMPLATE.md create mode 100644 src/Symfony/Component/Mailer/.github/workflows/check-subtree-split.yml create mode 100644 src/Symfony/Component/Mailer/Bridge/Amazon/.github/PULL_REQUEST_TEMPLATE.md create mode 100644 src/Symfony/Component/Mailer/Bridge/Amazon/.github/workflows/check-subtree-split.yml create mode 100644 src/Symfony/Component/Mailer/Bridge/Google/.github/PULL_REQUEST_TEMPLATE.md create mode 100644 src/Symfony/Component/Mailer/Bridge/Google/.github/workflows/check-subtree-split.yml create mode 100644 src/Symfony/Component/Mailer/Bridge/Mailchimp/.github/PULL_REQUEST_TEMPLATE.md create mode 100644 src/Symfony/Component/Mailer/Bridge/Mailchimp/.github/workflows/check-subtree-split.yml create mode 100644 src/Symfony/Component/Mailer/Bridge/Mailgun/.github/PULL_REQUEST_TEMPLATE.md create mode 100644 src/Symfony/Component/Mailer/Bridge/Mailgun/.github/workflows/check-subtree-split.yml create mode 100644 src/Symfony/Component/Mailer/Bridge/Mailjet/.github/PULL_REQUEST_TEMPLATE.md create mode 100644 src/Symfony/Component/Mailer/Bridge/Mailjet/.github/workflows/check-subtree-split.yml create mode 100644 src/Symfony/Component/Mailer/Bridge/OhMySmtp/.github/PULL_REQUEST_TEMPLATE.md create mode 100644 src/Symfony/Component/Mailer/Bridge/OhMySmtp/.github/workflows/check-subtree-split.yml create mode 100644 src/Symfony/Component/Mailer/Bridge/Postmark/.github/PULL_REQUEST_TEMPLATE.md create mode 100644 src/Symfony/Component/Mailer/Bridge/Postmark/.github/workflows/check-subtree-split.yml create mode 100644 src/Symfony/Component/Mailer/Bridge/Sendgrid/.github/PULL_REQUEST_TEMPLATE.md create mode 100644 src/Symfony/Component/Mailer/Bridge/Sendgrid/.github/workflows/check-subtree-split.yml create mode 100644 src/Symfony/Component/Mailer/Bridge/Sendinblue/.github/PULL_REQUEST_TEMPLATE.md create mode 100644 src/Symfony/Component/Mailer/Bridge/Sendinblue/.github/workflows/check-subtree-split.yml create mode 100644 src/Symfony/Component/Messenger/.github/PULL_REQUEST_TEMPLATE.md create mode 100644 src/Symfony/Component/Messenger/.github/workflows/check-subtree-split.yml create mode 100644 src/Symfony/Component/Messenger/Bridge/AmazonSqs/.github/PULL_REQUEST_TEMPLATE.md create mode 100644 src/Symfony/Component/Messenger/Bridge/AmazonSqs/.github/workflows/check-subtree-split.yml create mode 100644 src/Symfony/Component/Messenger/Bridge/Amqp/.github/PULL_REQUEST_TEMPLATE.md create mode 100644 src/Symfony/Component/Messenger/Bridge/Amqp/.github/workflows/check-subtree-split.yml create mode 100644 src/Symfony/Component/Messenger/Bridge/Beanstalkd/.github/PULL_REQUEST_TEMPLATE.md create mode 100644 src/Symfony/Component/Messenger/Bridge/Beanstalkd/.github/workflows/check-subtree-split.yml create mode 100644 src/Symfony/Component/Messenger/Bridge/Doctrine/.github/PULL_REQUEST_TEMPLATE.md create mode 100644 src/Symfony/Component/Messenger/Bridge/Doctrine/.github/workflows/check-subtree-split.yml create mode 100644 src/Symfony/Component/Messenger/Bridge/Redis/.github/PULL_REQUEST_TEMPLATE.md create mode 100644 src/Symfony/Component/Messenger/Bridge/Redis/.github/workflows/check-subtree-split.yml create mode 100644 src/Symfony/Component/Mime/.github/PULL_REQUEST_TEMPLATE.md create mode 100644 src/Symfony/Component/Mime/.github/workflows/check-subtree-split.yml create mode 100644 src/Symfony/Component/Notifier/.github/PULL_REQUEST_TEMPLATE.md create mode 100644 src/Symfony/Component/Notifier/.github/workflows/check-subtree-split.yml create mode 100644 src/Symfony/Component/Notifier/Bridge/AllMySms/.github/PULL_REQUEST_TEMPLATE.md create mode 100644 src/Symfony/Component/Notifier/Bridge/AllMySms/.github/workflows/check-subtree-split.yml create mode 100644 src/Symfony/Component/Notifier/Bridge/AmazonSns/.github/PULL_REQUEST_TEMPLATE.md create mode 100644 src/Symfony/Component/Notifier/Bridge/AmazonSns/.github/workflows/check-subtree-split.yml create mode 100644 src/Symfony/Component/Notifier/Bridge/Clickatell/.github/PULL_REQUEST_TEMPLATE.md create mode 100644 src/Symfony/Component/Notifier/Bridge/Clickatell/.github/workflows/check-subtree-split.yml create mode 100644 src/Symfony/Component/Notifier/Bridge/Discord/.github/PULL_REQUEST_TEMPLATE.md create mode 100644 src/Symfony/Component/Notifier/Bridge/Discord/.github/workflows/check-subtree-split.yml create mode 100644 src/Symfony/Component/Notifier/Bridge/Esendex/.github/PULL_REQUEST_TEMPLATE.md create mode 100644 src/Symfony/Component/Notifier/Bridge/Esendex/.github/workflows/check-subtree-split.yml create mode 100644 src/Symfony/Component/Notifier/Bridge/Expo/.github/PULL_REQUEST_TEMPLATE.md create mode 100644 src/Symfony/Component/Notifier/Bridge/Expo/.github/workflows/check-subtree-split.yml create mode 100644 src/Symfony/Component/Notifier/Bridge/FakeChat/.github/PULL_REQUEST_TEMPLATE.md create mode 100644 src/Symfony/Component/Notifier/Bridge/FakeChat/.github/workflows/check-subtree-split.yml create mode 100644 src/Symfony/Component/Notifier/Bridge/FakeSms/.github/PULL_REQUEST_TEMPLATE.md create mode 100644 src/Symfony/Component/Notifier/Bridge/FakeSms/.github/workflows/check-subtree-split.yml create mode 100644 src/Symfony/Component/Notifier/Bridge/Firebase/.github/PULL_REQUEST_TEMPLATE.md create mode 100644 src/Symfony/Component/Notifier/Bridge/Firebase/.github/workflows/check-subtree-split.yml create mode 100644 src/Symfony/Component/Notifier/Bridge/FreeMobile/.github/PULL_REQUEST_TEMPLATE.md create mode 100644 src/Symfony/Component/Notifier/Bridge/FreeMobile/.github/workflows/check-subtree-split.yml create mode 100644 src/Symfony/Component/Notifier/Bridge/GatewayApi/.github/PULL_REQUEST_TEMPLATE.md create mode 100644 src/Symfony/Component/Notifier/Bridge/GatewayApi/.github/workflows/check-subtree-split.yml create mode 100644 src/Symfony/Component/Notifier/Bridge/Gitter/.github/PULL_REQUEST_TEMPLATE.md create mode 100644 src/Symfony/Component/Notifier/Bridge/Gitter/.github/workflows/check-subtree-split.yml create mode 100644 src/Symfony/Component/Notifier/Bridge/GoogleChat/.github/PULL_REQUEST_TEMPLATE.md create mode 100644 src/Symfony/Component/Notifier/Bridge/GoogleChat/.github/workflows/check-subtree-split.yml create mode 100644 src/Symfony/Component/Notifier/Bridge/Infobip/.github/PULL_REQUEST_TEMPLATE.md create mode 100644 src/Symfony/Component/Notifier/Bridge/Infobip/.github/workflows/check-subtree-split.yml create mode 100644 src/Symfony/Component/Notifier/Bridge/Iqsms/.github/PULL_REQUEST_TEMPLATE.md create mode 100644 src/Symfony/Component/Notifier/Bridge/Iqsms/.github/workflows/check-subtree-split.yml create mode 100644 src/Symfony/Component/Notifier/Bridge/LightSms/.github/PULL_REQUEST_TEMPLATE.md create mode 100644 src/Symfony/Component/Notifier/Bridge/LightSms/.github/workflows/check-subtree-split.yml create mode 100644 src/Symfony/Component/Notifier/Bridge/LinkedIn/.github/PULL_REQUEST_TEMPLATE.md create mode 100644 src/Symfony/Component/Notifier/Bridge/LinkedIn/.github/workflows/check-subtree-split.yml create mode 100644 src/Symfony/Component/Notifier/Bridge/Mailjet/.github/PULL_REQUEST_TEMPLATE.md create mode 100644 src/Symfony/Component/Notifier/Bridge/Mailjet/.github/workflows/check-subtree-split.yml create mode 100644 src/Symfony/Component/Notifier/Bridge/Mattermost/.github/PULL_REQUEST_TEMPLATE.md create mode 100644 src/Symfony/Component/Notifier/Bridge/Mattermost/.github/workflows/check-subtree-split.yml create mode 100644 src/Symfony/Component/Notifier/Bridge/Mercure/.github/PULL_REQUEST_TEMPLATE.md create mode 100644 src/Symfony/Component/Notifier/Bridge/Mercure/.github/workflows/check-subtree-split.yml create mode 100644 src/Symfony/Component/Notifier/Bridge/MessageBird/.github/PULL_REQUEST_TEMPLATE.md create mode 100644 src/Symfony/Component/Notifier/Bridge/MessageBird/.github/workflows/check-subtree-split.yml create mode 100644 src/Symfony/Component/Notifier/Bridge/MessageMedia/.github/PULL_REQUEST_TEMPLATE.md create mode 100644 src/Symfony/Component/Notifier/Bridge/MessageMedia/.github/workflows/check-subtree-split.yml create mode 100644 src/Symfony/Component/Notifier/Bridge/MicrosoftTeams/.github/PULL_REQUEST_TEMPLATE.md create mode 100644 src/Symfony/Component/Notifier/Bridge/MicrosoftTeams/.github/workflows/check-subtree-split.yml create mode 100644 src/Symfony/Component/Notifier/Bridge/Mobyt/.github/PULL_REQUEST_TEMPLATE.md create mode 100644 src/Symfony/Component/Notifier/Bridge/Mobyt/.github/workflows/check-subtree-split.yml create mode 100644 src/Symfony/Component/Notifier/Bridge/Nexmo/.github/PULL_REQUEST_TEMPLATE.md create mode 100644 src/Symfony/Component/Notifier/Bridge/Nexmo/.github/workflows/check-subtree-split.yml create mode 100644 src/Symfony/Component/Notifier/Bridge/Octopush/.github/PULL_REQUEST_TEMPLATE.md create mode 100644 src/Symfony/Component/Notifier/Bridge/Octopush/.github/workflows/check-subtree-split.yml create mode 100644 src/Symfony/Component/Notifier/Bridge/OneSignal/.github/PULL_REQUEST_TEMPLATE.md create mode 100644 src/Symfony/Component/Notifier/Bridge/OneSignal/.github/workflows/check-subtree-split.yml create mode 100644 src/Symfony/Component/Notifier/Bridge/OvhCloud/.github/PULL_REQUEST_TEMPLATE.md create mode 100644 src/Symfony/Component/Notifier/Bridge/OvhCloud/.github/workflows/check-subtree-split.yml create mode 100644 src/Symfony/Component/Notifier/Bridge/RocketChat/.github/PULL_REQUEST_TEMPLATE.md create mode 100644 src/Symfony/Component/Notifier/Bridge/RocketChat/.github/workflows/check-subtree-split.yml create mode 100644 src/Symfony/Component/Notifier/Bridge/Sendinblue/.github/PULL_REQUEST_TEMPLATE.md create mode 100644 src/Symfony/Component/Notifier/Bridge/Sendinblue/.github/workflows/check-subtree-split.yml create mode 100644 src/Symfony/Component/Notifier/Bridge/Sinch/.github/PULL_REQUEST_TEMPLATE.md create mode 100644 src/Symfony/Component/Notifier/Bridge/Sinch/.github/workflows/check-subtree-split.yml create mode 100644 src/Symfony/Component/Notifier/Bridge/Slack/.github/PULL_REQUEST_TEMPLATE.md create mode 100644 src/Symfony/Component/Notifier/Bridge/Slack/.github/workflows/check-subtree-split.yml create mode 100644 src/Symfony/Component/Notifier/Bridge/Sms77/.github/PULL_REQUEST_TEMPLATE.md create mode 100644 src/Symfony/Component/Notifier/Bridge/Sms77/.github/workflows/check-subtree-split.yml create mode 100644 src/Symfony/Component/Notifier/Bridge/SmsBiuras/.github/PULL_REQUEST_TEMPLATE.md create mode 100644 src/Symfony/Component/Notifier/Bridge/SmsBiuras/.github/workflows/check-subtree-split.yml create mode 100644 src/Symfony/Component/Notifier/Bridge/Smsapi/.github/PULL_REQUEST_TEMPLATE.md create mode 100644 src/Symfony/Component/Notifier/Bridge/Smsapi/.github/workflows/check-subtree-split.yml create mode 100644 src/Symfony/Component/Notifier/Bridge/Smsc/.github/PULL_REQUEST_TEMPLATE.md create mode 100644 src/Symfony/Component/Notifier/Bridge/Smsc/.github/workflows/check-subtree-split.yml create mode 100644 src/Symfony/Component/Notifier/Bridge/SpotHit/.github/PULL_REQUEST_TEMPLATE.md create mode 100644 src/Symfony/Component/Notifier/Bridge/SpotHit/.github/workflows/check-subtree-split.yml create mode 100644 src/Symfony/Component/Notifier/Bridge/Telegram/.github/PULL_REQUEST_TEMPLATE.md create mode 100644 src/Symfony/Component/Notifier/Bridge/Telegram/.github/workflows/check-subtree-split.yml create mode 100644 src/Symfony/Component/Notifier/Bridge/Telnyx/.github/PULL_REQUEST_TEMPLATE.md create mode 100644 src/Symfony/Component/Notifier/Bridge/Telnyx/.github/workflows/check-subtree-split.yml create mode 100644 src/Symfony/Component/Notifier/Bridge/TurboSms/.github/PULL_REQUEST_TEMPLATE.md create mode 100644 src/Symfony/Component/Notifier/Bridge/TurboSms/.github/workflows/check-subtree-split.yml create mode 100644 src/Symfony/Component/Notifier/Bridge/Twilio/.github/PULL_REQUEST_TEMPLATE.md create mode 100644 src/Symfony/Component/Notifier/Bridge/Twilio/.github/workflows/check-subtree-split.yml create mode 100644 src/Symfony/Component/Notifier/Bridge/Vonage/.github/PULL_REQUEST_TEMPLATE.md create mode 100644 src/Symfony/Component/Notifier/Bridge/Vonage/.github/workflows/check-subtree-split.yml create mode 100644 src/Symfony/Component/Notifier/Bridge/Yunpian/.github/PULL_REQUEST_TEMPLATE.md create mode 100644 src/Symfony/Component/Notifier/Bridge/Yunpian/.github/workflows/check-subtree-split.yml create mode 100644 src/Symfony/Component/Notifier/Bridge/Zulip/.github/PULL_REQUEST_TEMPLATE.md create mode 100644 src/Symfony/Component/Notifier/Bridge/Zulip/.github/workflows/check-subtree-split.yml create mode 100644 src/Symfony/Component/OptionsResolver/.github/PULL_REQUEST_TEMPLATE.md create mode 100644 src/Symfony/Component/OptionsResolver/.github/workflows/check-subtree-split.yml create mode 100644 src/Symfony/Component/PasswordHasher/.github/PULL_REQUEST_TEMPLATE.md create mode 100644 src/Symfony/Component/PasswordHasher/.github/workflows/check-subtree-split.yml create mode 100644 src/Symfony/Component/Process/.github/PULL_REQUEST_TEMPLATE.md create mode 100644 src/Symfony/Component/Process/.github/workflows/check-subtree-split.yml create mode 100644 src/Symfony/Component/PropertyAccess/.github/PULL_REQUEST_TEMPLATE.md create mode 100644 src/Symfony/Component/PropertyAccess/.github/workflows/check-subtree-split.yml create mode 100644 src/Symfony/Component/PropertyInfo/.github/PULL_REQUEST_TEMPLATE.md create mode 100644 src/Symfony/Component/PropertyInfo/.github/workflows/check-subtree-split.yml create mode 100644 src/Symfony/Component/RateLimiter/.github/PULL_REQUEST_TEMPLATE.md create mode 100644 src/Symfony/Component/RateLimiter/.github/workflows/check-subtree-split.yml create mode 100644 src/Symfony/Component/Routing/.github/PULL_REQUEST_TEMPLATE.md create mode 100644 src/Symfony/Component/Routing/.github/workflows/check-subtree-split.yml create mode 100644 src/Symfony/Component/Runtime/.github/PULL_REQUEST_TEMPLATE.md create mode 100644 src/Symfony/Component/Runtime/.github/workflows/check-subtree-split.yml create mode 100644 src/Symfony/Component/Security/Core/.github/PULL_REQUEST_TEMPLATE.md create mode 100644 src/Symfony/Component/Security/Core/.github/workflows/check-subtree-split.yml create mode 100644 src/Symfony/Component/Security/Csrf/.github/PULL_REQUEST_TEMPLATE.md create mode 100644 src/Symfony/Component/Security/Csrf/.github/workflows/check-subtree-split.yml create mode 100644 src/Symfony/Component/Security/Guard/.github/PULL_REQUEST_TEMPLATE.md create mode 100644 src/Symfony/Component/Security/Guard/.github/workflows/check-subtree-split.yml create mode 100644 src/Symfony/Component/Security/Http/.github/PULL_REQUEST_TEMPLATE.md create mode 100644 src/Symfony/Component/Security/Http/.github/workflows/check-subtree-split.yml create mode 100644 src/Symfony/Component/Semaphore/.github/PULL_REQUEST_TEMPLATE.md create mode 100644 src/Symfony/Component/Semaphore/.github/workflows/check-subtree-split.yml create mode 100644 src/Symfony/Component/Serializer/.github/PULL_REQUEST_TEMPLATE.md create mode 100644 src/Symfony/Component/Serializer/.github/workflows/check-subtree-split.yml create mode 100644 src/Symfony/Component/Stopwatch/.github/PULL_REQUEST_TEMPLATE.md create mode 100644 src/Symfony/Component/Stopwatch/.github/workflows/check-subtree-split.yml create mode 100644 src/Symfony/Component/String/.github/PULL_REQUEST_TEMPLATE.md create mode 100644 src/Symfony/Component/String/.github/workflows/check-subtree-split.yml create mode 100644 src/Symfony/Component/Templating/.github/PULL_REQUEST_TEMPLATE.md create mode 100644 src/Symfony/Component/Templating/.github/workflows/check-subtree-split.yml create mode 100644 src/Symfony/Component/Translation/.github/PULL_REQUEST_TEMPLATE.md create mode 100644 src/Symfony/Component/Translation/.github/workflows/check-subtree-split.yml create mode 100644 src/Symfony/Component/Translation/Bridge/Crowdin/.github/PULL_REQUEST_TEMPLATE.md create mode 100644 src/Symfony/Component/Translation/Bridge/Crowdin/.github/workflows/check-subtree-split.yml create mode 100644 src/Symfony/Component/Translation/Bridge/Loco/.github/PULL_REQUEST_TEMPLATE.md create mode 100644 src/Symfony/Component/Translation/Bridge/Loco/.github/workflows/check-subtree-split.yml create mode 100644 src/Symfony/Component/Translation/Bridge/Lokalise/.github/PULL_REQUEST_TEMPLATE.md create mode 100644 src/Symfony/Component/Translation/Bridge/Lokalise/.github/workflows/check-subtree-split.yml create mode 100644 src/Symfony/Component/Uid/.github/PULL_REQUEST_TEMPLATE.md create mode 100644 src/Symfony/Component/Uid/.github/workflows/check-subtree-split.yml create mode 100644 src/Symfony/Component/Validator/.github/PULL_REQUEST_TEMPLATE.md create mode 100644 src/Symfony/Component/Validator/.github/workflows/check-subtree-split.yml create mode 100644 src/Symfony/Component/VarDumper/.github/PULL_REQUEST_TEMPLATE.md create mode 100644 src/Symfony/Component/VarDumper/.github/workflows/check-subtree-split.yml create mode 100644 src/Symfony/Component/VarExporter/.github/PULL_REQUEST_TEMPLATE.md create mode 100644 src/Symfony/Component/VarExporter/.github/workflows/check-subtree-split.yml create mode 100644 src/Symfony/Component/WebLink/.github/PULL_REQUEST_TEMPLATE.md create mode 100644 src/Symfony/Component/WebLink/.github/workflows/check-subtree-split.yml create mode 100644 src/Symfony/Component/Workflow/.github/PULL_REQUEST_TEMPLATE.md create mode 100644 src/Symfony/Component/Workflow/.github/workflows/check-subtree-split.yml create mode 100644 src/Symfony/Component/Yaml/.github/PULL_REQUEST_TEMPLATE.md create mode 100644 src/Symfony/Component/Yaml/.github/workflows/check-subtree-split.yml create mode 100644 src/Symfony/Contracts/.gitattributes create mode 100644 src/Symfony/Contracts/.github/PULL_REQUEST_TEMPLATE.md create mode 100644 src/Symfony/Contracts/.github/workflows/check-subtree-split.yml create mode 100644 src/Symfony/Contracts/Cache/.gitattributes create mode 100644 src/Symfony/Contracts/Cache/.github/PULL_REQUEST_TEMPLATE.md create mode 100644 src/Symfony/Contracts/Cache/.github/workflows/check-subtree-split.yml create mode 100644 src/Symfony/Contracts/Deprecation/.gitattributes create mode 100644 src/Symfony/Contracts/Deprecation/.github/PULL_REQUEST_TEMPLATE.md create mode 100644 src/Symfony/Contracts/Deprecation/.github/workflows/check-subtree-split.yml create mode 100644 src/Symfony/Contracts/EventDispatcher/.gitattributes create mode 100644 src/Symfony/Contracts/EventDispatcher/.github/PULL_REQUEST_TEMPLATE.md create mode 100644 src/Symfony/Contracts/EventDispatcher/.github/workflows/check-subtree-split.yml create mode 100644 src/Symfony/Contracts/HttpClient/.gitattributes create mode 100644 src/Symfony/Contracts/HttpClient/.github/PULL_REQUEST_TEMPLATE.md create mode 100644 src/Symfony/Contracts/HttpClient/.github/workflows/check-subtree-split.yml create mode 100644 src/Symfony/Contracts/Service/.gitattributes create mode 100644 src/Symfony/Contracts/Service/.github/PULL_REQUEST_TEMPLATE.md create mode 100644 src/Symfony/Contracts/Service/.github/workflows/check-subtree-split.yml create mode 100644 src/Symfony/Contracts/Translation/.gitattributes create mode 100644 src/Symfony/Contracts/Translation/.github/PULL_REQUEST_TEMPLATE.md create mode 100644 src/Symfony/Contracts/Translation/.github/workflows/check-subtree-split.yml diff --git a/.gitattributes b/.gitattributes index d1570aff1cd79..cf8890eefbda8 100644 --- a/.gitattributes +++ b/.gitattributes @@ -6,3 +6,4 @@ /src/Symfony/Component/Runtime export-ignore /src/Symfony/Component/Translation/Bridge export-ignore /src/Symfony/Component/Intl/Resources/data/*/* linguist-generated=true +/.git* export-ignore diff --git a/.github/sync-packages.php b/.github/sync-packages.php new file mode 100644 index 0000000000000..3d056466016e9 --- /dev/null +++ b/.github/sync-packages.php @@ -0,0 +1,75 @@ + Date: Thu, 18 Apr 2024 21:42:00 +0700 Subject: [PATCH 48/65] Review translation --- .../Validator/Resources/translations/validators.id.xlf | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Symfony/Component/Validator/Resources/translations/validators.id.xlf b/src/Symfony/Component/Validator/Resources/translations/validators.id.xlf index 980b1a676704b..b894c69d855d6 100644 --- a/src/Symfony/Component/Validator/Resources/translations/validators.id.xlf +++ b/src/Symfony/Component/Validator/Resources/translations/validators.id.xlf @@ -192,7 +192,7 @@ No temporary folder was configured in php.ini, or the configured folder does not exist. - Tidak ada folder sementara yang dikonfigurasi di php.ini, atau folder yang dikonfigurasi tidak ada. + Tidak ada folder sementara yang dikonfigurasi di php.ini, atau folder yang dikonfigurasi tidak ada. Cannot write temporary file to disk. From 2f5a77c9e508d71aff4c93f19c9ecc5a59a66584 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?D=C4=81vis=20Z=C4=81l=C4=ABtis?= Date: Fri, 19 Apr 2024 00:42:17 +0300 Subject: [PATCH 49/65] [Validator] review validators.lv.xlf --- .../Validator/Resources/translations/validators.lv.xlf | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Symfony/Component/Validator/Resources/translations/validators.lv.xlf b/src/Symfony/Component/Validator/Resources/translations/validators.lv.xlf index 9bbaafd0ce334..66e370fea944d 100644 --- a/src/Symfony/Component/Validator/Resources/translations/validators.lv.xlf +++ b/src/Symfony/Component/Validator/Resources/translations/validators.lv.xlf @@ -440,7 +440,7 @@ This URL is missing a top-level domain. - Šim URL trūkst augšējā līmeņa domēna. + Šim URL trūkst augšējā līmeņa domēna. From 0b1b275046fabb67def80d4df296578b88010348 Mon Sep 17 00:00:00 2001 From: Mathias Arlaud Date: Fri, 19 Apr 2024 17:22:54 +0200 Subject: [PATCH 50/65] [PropertyInfo] Fix PHPStan properties type in trait --- .../PropertyInfo/Extractor/PhpStanExtractor.php | 8 ++++++++ .../Tests/Extractor/PhpStanExtractorTest.php | 2 ++ .../AnotherNamespace/DummyInAnotherNamespace.php | 7 +++++++ .../AnotherNamespace/DummyTraitInAnotherNamespace.php | 11 +++++++++++ .../Tests/Fixtures/TraitUsage/DummyUsingTrait.php | 3 +++ 5 files changed, 31 insertions(+) create mode 100644 src/Symfony/Component/PropertyInfo/Tests/Fixtures/TraitUsage/AnotherNamespace/DummyInAnotherNamespace.php create mode 100644 src/Symfony/Component/PropertyInfo/Tests/Fixtures/TraitUsage/AnotherNamespace/DummyTraitInAnotherNamespace.php diff --git a/src/Symfony/Component/PropertyInfo/Extractor/PhpStanExtractor.php b/src/Symfony/Component/PropertyInfo/Extractor/PhpStanExtractor.php index 2f169690bff12..0596eb24fc20e 100644 --- a/src/Symfony/Component/PropertyInfo/Extractor/PhpStanExtractor.php +++ b/src/Symfony/Component/PropertyInfo/Extractor/PhpStanExtractor.php @@ -233,6 +233,14 @@ private function getDocBlockFromProperty(string $class, string $property): ?arra return null; } + $reflector = $reflectionProperty->getDeclaringClass(); + + foreach ($reflector->getTraits() as $trait) { + if ($trait->hasProperty($property)) { + return $this->getDocBlockFromProperty($trait->getName(), $property); + } + } + if (null === $rawDocNode = $reflectionProperty->getDocComment() ?: null) { return null; } diff --git a/src/Symfony/Component/PropertyInfo/Tests/Extractor/PhpStanExtractorTest.php b/src/Symfony/Component/PropertyInfo/Tests/Extractor/PhpStanExtractorTest.php index d8fa9b9192c51..fd11fcbeb8c63 100644 --- a/src/Symfony/Component/PropertyInfo/Tests/Extractor/PhpStanExtractorTest.php +++ b/src/Symfony/Component/PropertyInfo/Tests/Extractor/PhpStanExtractorTest.php @@ -19,6 +19,7 @@ use Symfony\Component\PropertyInfo\Tests\Fixtures\Dummy; use Symfony\Component\PropertyInfo\Tests\Fixtures\ParentDummy; use Symfony\Component\PropertyInfo\Tests\Fixtures\RootDummy\RootDummyItem; +use Symfony\Component\PropertyInfo\Tests\Fixtures\TraitUsage\AnotherNamespace\DummyInAnotherNamespace; use Symfony\Component\PropertyInfo\Tests\Fixtures\TraitUsage\DummyUsedInTrait; use Symfony\Component\PropertyInfo\Tests\Fixtures\TraitUsage\DummyUsingTrait; use Symfony\Component\PropertyInfo\Type; @@ -311,6 +312,7 @@ public static function propertiesDefinedByTraitsProvider(): array ['propertyInTraitPrimitiveType', new Type(Type::BUILTIN_TYPE_STRING)], ['propertyInTraitObjectSameNamespace', new Type(Type::BUILTIN_TYPE_OBJECT, false, DummyUsedInTrait::class)], ['propertyInTraitObjectDifferentNamespace', new Type(Type::BUILTIN_TYPE_OBJECT, false, Dummy::class)], + ['dummyInAnotherNamespace', new Type(Type::BUILTIN_TYPE_OBJECT, false, DummyInAnotherNamespace::class)], ]; } diff --git a/src/Symfony/Component/PropertyInfo/Tests/Fixtures/TraitUsage/AnotherNamespace/DummyInAnotherNamespace.php b/src/Symfony/Component/PropertyInfo/Tests/Fixtures/TraitUsage/AnotherNamespace/DummyInAnotherNamespace.php new file mode 100644 index 0000000000000..5ae6b60b59731 --- /dev/null +++ b/src/Symfony/Component/PropertyInfo/Tests/Fixtures/TraitUsage/AnotherNamespace/DummyInAnotherNamespace.php @@ -0,0 +1,7 @@ + Date: Sat, 20 Apr 2024 19:09:02 +0300 Subject: [PATCH 51/65] review: translation RU --- .../Validator/Resources/translations/validators.ru.xlf | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Symfony/Component/Validator/Resources/translations/validators.ru.xlf b/src/Symfony/Component/Validator/Resources/translations/validators.ru.xlf index 241cba52e3d61..dbee06a984b2c 100644 --- a/src/Symfony/Component/Validator/Resources/translations/validators.ru.xlf +++ b/src/Symfony/Component/Validator/Resources/translations/validators.ru.xlf @@ -440,7 +440,7 @@ This URL is missing a top-level domain. - Этому URL не хватает домена верхнего уровня. + В этом URL отсутствует домен верхнего уровня. From 3db9b7745c608ecbbd85bc6b66c1a6587289820c Mon Sep 17 00:00:00 2001 From: Linas Ramanauskas Date: Sat, 20 Apr 2024 21:12:13 +0300 Subject: [PATCH 52/65] #53771 Updated validator Lithuanian translations --- .../Resources/translations/validators.lt.xlf | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/src/Symfony/Component/Validator/Resources/translations/validators.lt.xlf b/src/Symfony/Component/Validator/Resources/translations/validators.lt.xlf index 26b3a4e77e374..e16daea93b80f 100644 --- a/src/Symfony/Component/Validator/Resources/translations/validators.lt.xlf +++ b/src/Symfony/Component/Validator/Resources/translations/validators.lt.xlf @@ -136,7 +136,7 @@ This value is not a valid IP address. - Ši vertė nėra galiojantis IP adresas. + Ši reikšmė nėra tinkamas IP adresas. This value is not a valid language. @@ -192,7 +192,7 @@ No temporary folder was configured in php.ini, or the configured folder does not exist. - php.ini nesukonfigūruotas laikinas aplankas, arba sukonfigūruotas aplankas neegzistuoja. + php.ini nesukonfigūruotas laikinas aplankas arba sukonfigūruotas aplankas neegzistuoja. Cannot write temporary file to disk. @@ -224,7 +224,7 @@ This value is not a valid International Bank Account Number (IBAN). - Ši vertė nėra galiojantis Tarptautinis Banko Sąskaitos Numeris (IBAN). + Ši reikšmė nėra tinkamas Tarptautinis Banko Sąskaitos Numeris (IBAN). This value is not a valid ISBN-10. @@ -312,7 +312,7 @@ This value is not a valid Business Identifier Code (BIC). - Ši vertė nėra galiojantis Verslo Identifikavimo Kodas (BIC). + Ši reikšmė nėra tinkamas Verslo Identifikavimo Kodas (BIC). Error @@ -320,7 +320,7 @@ This value is not a valid UUID. - Ši vertė nėra galiojantis UUID. + Ši reikšmė nėra tinkamas UUID. This value should be a multiple of {{ compared_value }}. @@ -432,15 +432,15 @@ The detected character encoding is invalid ({{ detected }}). Allowed encodings are {{ encodings }}. - Nustatyta simbolių koduotė yra netinkama ({{ detected }}). Leidžiamos koduotės yra {{ encodings }}. + Aptikta simbolių koduotė yra netinkama ({{ detected }}). Leidžiamos koduotės yra {{ encodings }}. This value is not a valid MAC address. - Ši vertė nėra galiojantis MAC adresas. + Ši reikšmė nėra tinkamas MAC adresas. This URL is missing a top-level domain. - Šiam URL trūksta aukščiausio lygio domeno. + Šiam URL trūksta aukščiausio lygio domeno. From 4c58f7128696ad1754e5dbf78642dd2f2333dac0 Mon Sep 17 00:00:00 2001 From: AbdelatifAitBara Date: Sat, 20 Apr 2024 21:26:36 +0200 Subject: [PATCH 53/65] Updated id=113 Arabic translation. --- .../Validator/Resources/translations/validators.ar.xlf | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Symfony/Component/Validator/Resources/translations/validators.ar.xlf b/src/Symfony/Component/Validator/Resources/translations/validators.ar.xlf index a96cce98048e4..08012ac233bdd 100644 --- a/src/Symfony/Component/Validator/Resources/translations/validators.ar.xlf +++ b/src/Symfony/Component/Validator/Resources/translations/validators.ar.xlf @@ -440,7 +440,7 @@ This URL is missing a top-level domain. - هذا الرابط يفتقر إلى نطاق أعلى مستوى. + هذا الرابط يفتقر إلى نطاق المستوى الأعلى. From df59f75e3cd2b53a40c840e8426002cc2bbeae59 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Oriol=20Vi=C3=B1als?= Date: Mon, 22 Apr 2024 15:31:01 +0200 Subject: [PATCH 54/65] Update spanish and catalan translations --- .../Resources/translations/validators.ca.xlf | 46 +++++++++---------- .../Resources/translations/validators.es.xlf | 4 +- 2 files changed, 25 insertions(+), 25 deletions(-) diff --git a/src/Symfony/Component/Validator/Resources/translations/validators.ca.xlf b/src/Symfony/Component/Validator/Resources/translations/validators.ca.xlf index c9da5988af148..652c0a48d693c 100644 --- a/src/Symfony/Component/Validator/Resources/translations/validators.ca.xlf +++ b/src/Symfony/Component/Validator/Resources/translations/validators.ca.xlf @@ -108,7 +108,7 @@ This value is not a valid URL. - Aquest valor no és una URL vàlida. + Aquest valor no és un URL vàlid. The two values should be equal. @@ -116,7 +116,7 @@ The file is too large. Allowed maximum size is {{ limit }} {{ suffix }}. - L'arxiu és massa gran. El tamany màxim permés és {{ limit }} {{ suffix }}. + L'arxiu és massa gran. La mida màxima permesa és {{ limit }} {{ suffix }}. The file is too large. @@ -136,7 +136,7 @@ This value is not a valid IP address. - Aquest valor no és una adreça IP vàlida. + Aquest valor no és una adreça IP vàlida. This value is not a valid language. @@ -160,19 +160,19 @@ The image width is too big ({{ width }}px). Allowed maximum width is {{ max_width }}px. - L'amplària de la imatge és massa gran ({{ width }}px). L'amplària màxima permesa són {{ max_width }}px. + L'amplària de la imatge és massa gran ({{ width }}px). L'amplària màxima permesa és {{ max_width }}px. The image width is too small ({{ width }}px). Minimum width expected is {{ min_width }}px. - L'amplària de la imatge és massa petita ({{ width }}px). L'amplària mínima requerida són {{ min_width }}px. + L'amplària de la imatge és massa petita ({{ width }}px). L'amplària mínima requerida és {{ min_width }}px. The image height is too big ({{ height }}px). Allowed maximum height is {{ max_height }}px. - L'altura de la imatge és massa gran ({{ height }}px). L'altura màxima permesa són {{ max_height }}px. + L'altura de la imatge és massa gran ({{ height }}px). L'altura màxima permesa és {{ max_height }}px. The image height is too small ({{ height }}px). Minimum height expected is {{ min_height }}px. - L'altura de la imatge és massa petita ({{ height }}px). L'altura mínima requerida són {{ min_height }}px. + L'altura de la imatge és massa petita ({{ height }}px). L'altura mínima requerida és {{ min_height }}px. This value should be the user's current password. @@ -192,7 +192,7 @@ No temporary folder was configured in php.ini, or the configured folder does not exist. - No s'ha configurat cap carpeta temporal en php.ini, o la carpeta configurada no existeix. + No s'ha configurat cap carpeta temporal en php.ini, o la carpeta configurada no existeix. Cannot write temporary file to disk. @@ -200,7 +200,7 @@ A PHP extension caused the upload to fail. - Una extensió de PHP va fer que la pujada fallara. + Una extensió de PHP va fer que la pujada fallarà. This collection should contain {{ limit }} element or more.|This collection should contain {{ limit }} elements or more. @@ -224,7 +224,7 @@ This value is not a valid International Bank Account Number (IBAN). - Aquest valor no és un Número de Compte Bancari Internacional (IBAN) vàlid. + Aquest valor no és un Número de Compte Bancari Internacional (IBAN) vàlid. This value is not a valid ISBN-10. @@ -276,31 +276,31 @@ This value should not be identical to {{ compared_value_type }} {{ compared_value }}. - Aquest valor no hauria de idèntic a {{ compared_value_type }} {{ compared_value }}. + Aquest valor no hauria de ser idèntic a {{ compared_value_type }} {{ compared_value }}. The image ratio is too big ({{ ratio }}). Allowed maximum ratio is {{ max_ratio }}. - La proporció de l'imatge és massa gran ({{ ratio }}). La màxima proporció permesa és {{ max_ratio }}. + La proporció de la imatge és massa gran ({{ ratio }}). La màxima proporció permesa és {{ max_ratio }}. The image ratio is too small ({{ ratio }}). Minimum ratio expected is {{ min_ratio }}. - La proporció de l'imatge és massa petita ({{ ratio }}). La mínima proporció permesa és {{ max_ratio }}. + La proporció de la imatge és massa petita ({{ ratio }}). La mínima proporció permesa és {{ min_ratio }}. The image is square ({{ width }}x{{ height }}px). Square images are not allowed. - L'imatge és quadrada({{ width }}x{{ height }}px). Les imatges quadrades no estan permeses. + La imatge és quadrada({{ width }}x{{ height }}px). Les imatges quadrades no estan permeses. The image is landscape oriented ({{ width }}x{{ height }}px). Landscape oriented images are not allowed. - L'imatge està orientada horitzontalment ({{ width }}x{{ height }}px). Les imatges orientades horitzontalment no estan permeses. + La imatge està orientada horitzontalment ({{ width }}x{{ height }}px). Les imatges orientades horitzontalment no estan permeses. The image is portrait oriented ({{ width }}x{{ height }}px). Portrait oriented images are not allowed. - L'imatge està orientada verticalment ({{ width }}x{{ height }}px). Les imatges orientades verticalment no estan permeses. + La imatge està orientada verticalment ({{ width }}x{{ height }}px). Les imatges orientades verticalment no estan permeses. An empty file is not allowed. - No està permès un fixter buit. + No està permès un fitxer buit. The host could not be resolved. @@ -312,7 +312,7 @@ This value is not a valid Business Identifier Code (BIC). - Aquest valor no és un Codi d'Identificador de Negocis (BIC) vàlid. + Aquest valor no és un Codi d'identificació bancari (BIC) vàlid. Error @@ -320,7 +320,7 @@ This value is not a valid UUID. - Aquest valor no és un UUID vàlid. + Aquest valor no és un UUID vàlid. This value should be a multiple of {{ compared_value }}. @@ -428,19 +428,19 @@ The extension of the file is invalid ({{ extension }}). Allowed extensions are {{ extensions }}. - L'extensió del fitxer no és vàlida ({{ extension }}). Les extensions permeses són {{ extensions }}. + L'extensió del fitxer no és vàlida ({{ extension }}). Les extensions permeses són {{ extensions }}. The detected character encoding is invalid ({{ detected }}). Allowed encodings are {{ encodings }}. - S'ha detectat que la codificació de caràcters no és vàlida ({{ detected }}). Les codificacions permeses són {{ encodings }}. + S'ha detectat que la codificació de caràcters no és vàlida ({{ detected }}). Les codificacions permeses són {{ encodings }}. This value is not a valid MAC address. - Aquest valor no és una adreça MAC vàlida. + Aquest valor no és una adreça MAC vàlida. This URL is missing a top-level domain. - Aquesta URL no conté un domini de nivell superior. + Aquesta URL no conté un domini de primer nivell. diff --git a/src/Symfony/Component/Validator/Resources/translations/validators.es.xlf b/src/Symfony/Component/Validator/Resources/translations/validators.es.xlf index 141ec515f7893..d58045471c70c 100644 --- a/src/Symfony/Component/Validator/Resources/translations/validators.es.xlf +++ b/src/Symfony/Component/Validator/Resources/translations/validators.es.xlf @@ -404,7 +404,7 @@ The filename is too long. It should have {{ filename_max_length }} character or less.|The filename is too long. It should have {{ filename_max_length }} characters or less. - El nombre del archivo es demasido largo. Debe tener {{ filename_max_length }} carácter o menos.|El nombre del archivo es demasido largo. Debe tener {{ filename_max_length }} caracteres o menos. + El nombre del archivo es demasiado largo. Debe tener {{ filename_max_length }} carácter o menos.|El nombre del archivo es demasiado largo. Debe tener {{ filename_max_length }} caracteres o menos. The password strength is too low. Please use a stronger password. @@ -440,7 +440,7 @@ This URL is missing a top-level domain. - Esta URL no contiene una extensión de dominio (TLD). + Esta URL no contiene una extensión de dominio (TLD). From a2349920cd5d692afc83cec5d7b06f2e58c3b79a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ga=C3=ABtan=20Verlhac?= Date: Sat, 20 Apr 2024 13:06:54 +0200 Subject: [PATCH 55/65] review: FR translation Fix #54649 --- .../Validator/Resources/translations/validators.fr.xlf | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Symfony/Component/Validator/Resources/translations/validators.fr.xlf b/src/Symfony/Component/Validator/Resources/translations/validators.fr.xlf index 27a57d0331fe6..a60384c5d7724 100644 --- a/src/Symfony/Component/Validator/Resources/translations/validators.fr.xlf +++ b/src/Symfony/Component/Validator/Resources/translations/validators.fr.xlf @@ -440,7 +440,7 @@ This URL is missing a top-level domain. - Cette URL est dépourvue de domaine de premier niveau. + Cette URL doit contenir un de domaine de premier niveau. From f439702d4f82b6436377f93c3c5384d9b8a377f6 Mon Sep 17 00:00:00 2001 From: Christian Flothmann Date: Tue, 23 Apr 2024 13:55:11 +0200 Subject: [PATCH 56/65] call substr() with integer offsets --- src/Symfony/Component/Yaml/Parser.php | 4 ++-- src/Symfony/Component/Yaml/Tests/ParserTest.php | 9 +++++++-- 2 files changed, 9 insertions(+), 4 deletions(-) diff --git a/src/Symfony/Component/Yaml/Parser.php b/src/Symfony/Component/Yaml/Parser.php index 1b193ee6e917f..6b5b273a77ead 100644 --- a/src/Symfony/Component/Yaml/Parser.php +++ b/src/Symfony/Component/Yaml/Parser.php @@ -653,12 +653,12 @@ private function getNextEmbedBlock(?int $indentation = null, bool $inSequence = } if ($this->isCurrentLineBlank()) { - $data[] = substr($this->currentLine, $newIndent); + $data[] = substr($this->currentLine, $newIndent ?? 0); continue; } if ($indent >= $newIndent) { - $data[] = substr($this->currentLine, $newIndent); + $data[] = substr($this->currentLine, $newIndent ?? 0); } elseif ($this->isCurrentLineComment()) { $data[] = $this->currentLine; } elseif (0 == $indent) { diff --git a/src/Symfony/Component/Yaml/Tests/ParserTest.php b/src/Symfony/Component/Yaml/Tests/ParserTest.php index 741a6ad83c99e..5fa6d08064334 100644 --- a/src/Symfony/Component/Yaml/Tests/ParserTest.php +++ b/src/Symfony/Component/Yaml/Tests/ParserTest.php @@ -1476,13 +1476,13 @@ public static function getBinaryData() data: !!binary | SGVsbG8gd29ybGQ= EOT - ], + ], 'containing spaces in block scalar' => [ <<<'EOT' data: !!binary | SGVs bG8gd 29ybGQ= EOT - ], + ], ]; } @@ -2949,6 +2949,11 @@ public function testParseIdeographicSpaces() ], $this->parser->parse($expected)); } + public function testSkipBlankLines() + { + $this->assertSame(['foo' => [null]], (new Parser())->parse("foo:\n-\n\n")); + } + private function assertSameData($expected, $actual) { $this->assertEquals($expected, $actual); From 0413610e55e519cdae8e6ca20e4207af48d46f23 Mon Sep 17 00:00:00 2001 From: Antoine Lamirault Date: Tue, 23 Apr 2024 21:37:17 +0200 Subject: [PATCH 57/65] Fix french translation --- .../Validator/Resources/translations/validators.fr.xlf | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Symfony/Component/Validator/Resources/translations/validators.fr.xlf b/src/Symfony/Component/Validator/Resources/translations/validators.fr.xlf index a60384c5d7724..4e949d838cae7 100644 --- a/src/Symfony/Component/Validator/Resources/translations/validators.fr.xlf +++ b/src/Symfony/Component/Validator/Resources/translations/validators.fr.xlf @@ -440,7 +440,7 @@ This URL is missing a top-level domain. - Cette URL doit contenir un de domaine de premier niveau. + Cette URL doit contenir un domaine de premier niveau. From 0fa87b58627264e84aaae2a8283132f7feded510 Mon Sep 17 00:00:00 2001 From: Simone Ruggieri <36771527+Simopich@users.noreply.github.com> Date: Wed, 24 Apr 2024 17:08:17 +0200 Subject: [PATCH 58/65] Reviewed italian translation --- .../Validator/Resources/translations/validators.it.xlf | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Symfony/Component/Validator/Resources/translations/validators.it.xlf b/src/Symfony/Component/Validator/Resources/translations/validators.it.xlf index df67a2c082b5c..74f3a75b0c97e 100644 --- a/src/Symfony/Component/Validator/Resources/translations/validators.it.xlf +++ b/src/Symfony/Component/Validator/Resources/translations/validators.it.xlf @@ -440,7 +440,7 @@ This URL is missing a top-level domain. - Questo URL è privo di un dominio di primo livello. + Questo URL è privo di un dominio di primo livello. From a3a2eb1f31a048361d387028affe082bf3dc39a9 Mon Sep 17 00:00:00 2001 From: ffd000 <66318502+ffd000@users.noreply.github.com> Date: Wed, 24 Apr 2024 12:08:44 +0300 Subject: [PATCH 59/65] [Validator] Review Bulgarian (bg) translation --- .../Resources/translations/validators.bg.xlf | 22 +++++++++---------- 1 file changed, 11 insertions(+), 11 deletions(-) diff --git a/src/Symfony/Component/Validator/Resources/translations/validators.bg.xlf b/src/Symfony/Component/Validator/Resources/translations/validators.bg.xlf index de24ec5eb0c4d..d2405339f0c35 100644 --- a/src/Symfony/Component/Validator/Resources/translations/validators.bg.xlf +++ b/src/Symfony/Component/Validator/Resources/translations/validators.bg.xlf @@ -68,7 +68,7 @@ The mime type of the file is invalid ({{ type }}). Allowed mime types are {{ types }}. - Mime типа на файла е невалиден ({{ type }}). Разрешени mime типове са {{ types }}. + Mime типът на файла е невалиден ({{ type }}). Разрешени mime типове са {{ types }}. This value should be {{ limit }} or less. @@ -136,7 +136,7 @@ This value is not a valid IP address. - Тази стойност не е валиден IP адрес. + Стойността не е валиден IP адрес. This value is not a valid language. @@ -156,7 +156,7 @@ The size of the image could not be detected. - Размера на изображението не може да бъде определен. + Размерът на изображението не може да бъде определен. The image width is too big ({{ width }}px). Allowed maximum width is {{ max_width }}px. @@ -192,7 +192,7 @@ No temporary folder was configured in php.ini, or the configured folder does not exist. - В php.ini не е конфигурирана временна директория, или конфигурираната директория не съществува. + В php.ini не е конфигурирана временна директория или конфигурираната директория не съществува. Cannot write temporary file to disk. @@ -224,7 +224,7 @@ This value is not a valid International Bank Account Number (IBAN). - Тази стойност не е валиден международен банков сметка номер (IBAN). + Стойността не е валиден Международен номер на банкова сметка (IBAN). This value is not a valid ISBN-10. @@ -312,7 +312,7 @@ This value is not a valid Business Identifier Code (BIC). - Тази стойност не е валиден код за идентификация на бизнеса (BIC). + Стойността не е валиден Бизнес идентификационен код (BIC). Error @@ -320,7 +320,7 @@ This value is not a valid UUID. - Тази стойност не е валиден UUID. + Стойността не е валиден UUID. This value should be a multiple of {{ compared_value }}. @@ -328,7 +328,7 @@ This Business Identifier Code (BIC) is not associated with IBAN {{ iban }}. - Бизнес идентификационния код (BIC) не е свързан с IBAN {{ iban }}. + Бизнес идентификационният код (BIC) не е свързан с IBAN {{ iban }}. This value should be valid JSON. @@ -360,7 +360,7 @@ This password has been leaked in a data breach, it must not be used. Please use another password. - Тази парола е компрометирана, не трябва да бъде използвана. Моля използвайте друга парола. + Тази парола е компрометирана, не може да бъде използвана. Моля използвайте друга парола. This value should be between {{ min }} and {{ max }}. @@ -436,11 +436,11 @@ This value is not a valid MAC address. - Тази стойност не е валиден MAC адрес. + Стойността не е валиден MAC адрес. This URL is missing a top-level domain. - На този URL липсва домейн от най-високо ниво. + На този URL липсва домейн от най-високо ниво. From e0d97f8629f0e2608fc876ca37d71d855526cea2 Mon Sep 17 00:00:00 2001 From: Christian Flothmann Date: Wed, 24 Apr 2024 19:39:38 +0200 Subject: [PATCH 60/65] read form values using the chain data accessor --- .../DataAccessor/PropertyPathAccessor.php | 25 ++++++++++++++++-- .../Extension/Core/DataMapper/DataMapper.php | 8 ++++++ .../Core/DataMapper/DataMapperTest.php | 26 +++++++++++++++++++ 3 files changed, 57 insertions(+), 2 deletions(-) diff --git a/src/Symfony/Component/Form/Extension/Core/DataAccessor/PropertyPathAccessor.php b/src/Symfony/Component/Form/Extension/Core/DataAccessor/PropertyPathAccessor.php index e639bad2a49c2..24de33a6b902e 100644 --- a/src/Symfony/Component/Form/Extension/Core/DataAccessor/PropertyPathAccessor.php +++ b/src/Symfony/Component/Form/Extension/Core/DataAccessor/PropertyPathAccessor.php @@ -12,7 +12,9 @@ namespace Symfony\Component\Form\Extension\Core\DataAccessor; use Symfony\Component\Form\DataAccessorInterface; +use Symfony\Component\Form\DataMapperInterface; use Symfony\Component\Form\Exception\AccessException; +use Symfony\Component\Form\Extension\Core\DataMapper\DataMapper; use Symfony\Component\Form\FormInterface; use Symfony\Component\PropertyAccess\Exception\AccessException as PropertyAccessException; use Symfony\Component\PropertyAccess\Exception\NoSuchIndexException; @@ -57,15 +59,25 @@ public function setValue(&$data, $propertyValue, FormInterface $form): void throw new AccessException('Unable to write the given value as no property path is defined.'); } + $getValue = function () use ($data, $form, $propertyPath) { + $dataMapper = $this->getDataMapper($form); + + if ($dataMapper instanceof DataMapper && null !== $dataAccessor = $dataMapper->getDataAccessor()) { + return $dataAccessor->getValue($data, $form); + } + + return $this->getPropertyValue($data, $propertyPath); + }; + // If the field is of type DateTimeInterface and the data is the same skip the update to // keep the original object hash - if ($propertyValue instanceof \DateTimeInterface && $propertyValue == $this->getPropertyValue($data, $propertyPath)) { + if ($propertyValue instanceof \DateTimeInterface && $propertyValue == $getValue()) { return; } // If the data is identical to the value in $data, we are // dealing with a reference - if (!\is_object($data) || !$form->getConfig()->getByReference() || $propertyValue !== $this->getPropertyValue($data, $propertyPath)) { + if (!\is_object($data) || !$form->getConfig()->getByReference() || $propertyValue !== $getValue()) { $this->propertyAccessor->setValue($data, $propertyPath, $propertyValue); } } @@ -105,4 +117,13 @@ private function getPropertyValue($data, PropertyPathInterface $propertyPath) return null; } } + + private function getDataMapper(FormInterface $form): ?DataMapperInterface + { + do { + $dataMapper = $form->getConfig()->getDataMapper(); + } while (null === $dataMapper && null !== $form = $form->getParent()); + + return $dataMapper; + } } diff --git a/src/Symfony/Component/Form/Extension/Core/DataMapper/DataMapper.php b/src/Symfony/Component/Form/Extension/Core/DataMapper/DataMapper.php index 7995842eecbbf..e480f47baa632 100644 --- a/src/Symfony/Component/Form/Extension/Core/DataMapper/DataMapper.php +++ b/src/Symfony/Component/Form/Extension/Core/DataMapper/DataMapper.php @@ -88,4 +88,12 @@ public function mapFormsToData(iterable $forms, &$data): void } } } + + /** + * @internal + */ + public function getDataAccessor(): DataAccessorInterface + { + return $this->dataAccessor; + } } diff --git a/src/Symfony/Component/Form/Tests/Extension/Core/DataMapper/DataMapperTest.php b/src/Symfony/Component/Form/Tests/Extension/Core/DataMapper/DataMapperTest.php index c119d665b85f1..c4a271cd03fb2 100644 --- a/src/Symfony/Component/Form/Tests/Extension/Core/DataMapper/DataMapperTest.php +++ b/src/Symfony/Component/Form/Tests/Extension/Core/DataMapper/DataMapperTest.php @@ -17,6 +17,8 @@ use Symfony\Component\Form\Extension\Core\DataAccessor\PropertyPathAccessor; use Symfony\Component\Form\Extension\Core\DataMapper\DataMapper; use Symfony\Component\Form\Extension\Core\Type\DateType; +use Symfony\Component\Form\Extension\Core\Type\FormType; +use Symfony\Component\Form\Extension\Core\Type\TextType; use Symfony\Component\Form\Form; use Symfony\Component\Form\FormConfigBuilder; use Symfony\Component\Form\FormFactoryBuilder; @@ -419,6 +421,25 @@ public function testMapFormsToDataMapsDateTimeInstanceToArrayIfNotSetBefore() $this->assertEquals(['date' => new \DateTime('2022-08-04', new \DateTimeZone('UTC'))], $form->getData()); } + + public function testMapFormToDataWithOnlyGetterConfigured() + { + $person = new DummyPerson('foo'); + $form = (new FormFactoryBuilder()) + ->getFormFactory() + ->createBuilder(FormType::class, $person) + ->add('name', TextType::class, [ + 'getter' => function (DummyPerson $person) { + return $person->myName(); + }, + ]) + ->getForm(); + $form->submit([ + 'name' => 'bar', + ]); + + $this->assertSame('bar', $person->myName()); + } } class SubmittedForm extends Form @@ -455,4 +476,9 @@ public function rename($name): void { $this->name = $name; } + + public function setName($name): void + { + $this->name = $name; + } } From 2a6107d487de3654495b21862c38acaaebd913c5 Mon Sep 17 00:00:00 2001 From: Christian Flothmann Date: Sat, 27 Apr 2024 11:31:10 +0200 Subject: [PATCH 61/65] detect wrong e-mail validation modes --- src/Symfony/Component/Validator/Constraints/Email.php | 4 ++++ .../Component/Validator/Tests/Constraints/EmailTest.php | 7 +++++++ 2 files changed, 11 insertions(+) diff --git a/src/Symfony/Component/Validator/Constraints/Email.php b/src/Symfony/Component/Validator/Constraints/Email.php index 912878de763c9..e9e0e06d3b8b7 100644 --- a/src/Symfony/Component/Validator/Constraints/Email.php +++ b/src/Symfony/Component/Validator/Constraints/Email.php @@ -62,6 +62,10 @@ public function __construct( throw new InvalidArgumentException('The "mode" parameter value is not valid.'); } + if (null !== $mode && !\in_array($mode, self::$validationModes, true)) { + throw new InvalidArgumentException('The "mode" parameter value is not valid.'); + } + parent::__construct($options, $groups, $payload); $this->message = $message ?? $this->message; diff --git a/src/Symfony/Component/Validator/Tests/Constraints/EmailTest.php b/src/Symfony/Component/Validator/Tests/Constraints/EmailTest.php index bf719b6f848fb..3451fdfb208e0 100644 --- a/src/Symfony/Component/Validator/Tests/Constraints/EmailTest.php +++ b/src/Symfony/Component/Validator/Tests/Constraints/EmailTest.php @@ -33,6 +33,13 @@ public function testUnknownModesTriggerException() new Email(['mode' => 'Unknown Mode']); } + public function testUnknownModeArgumentsTriggerException() + { + $this->expectException(InvalidArgumentException::class); + $this->expectExceptionMessage('The "mode" parameter value is not valid.'); + new Email(null, null, 'Unknown Mode'); + } + public function testNormalizerCanBeSet() { $email = new Email(['normalizer' => 'trim']); From 7e796e1769436e4fe01c65ce97eed34b556460e8 Mon Sep 17 00:00:00 2001 From: Oskar Stark Date: Sun, 28 Apr 2024 10:53:28 +0200 Subject: [PATCH 62/65] [FrameworkBundle] Fix indentation --- .../DependencyInjection/FrameworkExtension.php | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/src/Symfony/Bundle/FrameworkBundle/DependencyInjection/FrameworkExtension.php b/src/Symfony/Bundle/FrameworkBundle/DependencyInjection/FrameworkExtension.php index 307048dd3e040..731c6e7ee4b3e 100644 --- a/src/Symfony/Bundle/FrameworkBundle/DependencyInjection/FrameworkExtension.php +++ b/src/Symfony/Bundle/FrameworkBundle/DependencyInjection/FrameworkExtension.php @@ -2080,10 +2080,9 @@ private function registerMessengerConfiguration(array $config, ContainerBuilder ->setFactory([new Reference('messenger.transport_factory'), 'createTransport']) ->setArguments([$transport['dsn'], $transport['options'] + ['transport_name' => $name], new Reference($serializerId)]) ->addTag('messenger.receiver', [ - 'alias' => $name, - 'is_failure_transport' => \in_array($name, $failureTransports), - ] - ) + 'alias' => $name, + 'is_failure_transport' => \in_array($name, $failureTransports), + ]) ; $container->setDefinition($transportId = 'messenger.transport.'.$name, $transportDefinition); $senderAliases[$name] = $transportId; From d1c1cc8d48ee8d02504781f630fe643121751c6c Mon Sep 17 00:00:00 2001 From: Fabien Potencier Date: Mon, 29 Apr 2024 13:16:34 +0200 Subject: [PATCH 63/65] Update CHANGELOG for 5.4.39 --- CHANGELOG-5.4.md | 27 +++++++++++++++++++++++++++ 1 file changed, 27 insertions(+) diff --git a/CHANGELOG-5.4.md b/CHANGELOG-5.4.md index a4ba8eb29eeef..4675182aec6dd 100644 --- a/CHANGELOG-5.4.md +++ b/CHANGELOG-5.4.md @@ -7,6 +7,33 @@ in 5.4 minor versions. To get the diff for a specific change, go to https://github.com/symfony/symfony/commit/XXX where XXX is the change hash To get the diff between two versions, go to https://github.com/symfony/symfony/compare/v5.4.0...v5.4.1 +* 5.4.39 (2024-04-29) + + * bug #54751 [Validator]  detect wrong e-mail validation modes (xabbuh) + * bug #54723 [Form] read form values using the chain data accessor (xabbuh) + * bug #54706 [Yaml] call substr() with integer offsets (xabbuh) + * bug #54675 [PropertyInfo] Fix PHPStan properties type in trait (mtarld) + * bug #54635 [Serializer] Revert "Fix object normalizer when properties has the same name as their accessor" - it was a BC Break (NeilPeyssard) + * bug #54625 [Intl] Remove resources data from classmap generation (shyim) + * bug #54598 [TwigBridge]  implement NodeVisitorInterface instead of extending AbstractNodeVisitor (xabbuh) + * bug #54072 [HttpKernel] Fix datacollector caster for reference object property (ebuildy) + * bug #54564 [Translation] Skip state=needs-translation entries only when source == target (nicolas-grekas) + * bug #54579 [Cache] Always select database for persistent redis connections (uncaught) + * bug #54059 [Security] Validate that CSRF token in form login is string similar to username/password (glaubinix) + * bug #54547 [HttpKernel] Force non lazy controller services (smnandre) + * bug #54517 [HttpClient] Let curl handle transfer encoding (michaelhue) + * bug #52917 [Serializer] Fix unexpected allowed attributes (mtarld) + * bug #54063 [FrameworkBundle] Fix registration of the bundle path to translation (FlyingDR) + * bug #54392 [Messenger] Make Doctrine connection ignore unrelated tables on setup (MatTheCat) + * bug #54506 [HttpFoundation] Set content-type header in RedirectResponse (smnandre) + * bug #52698 [Serializer] Fix XML scalar to object denormalization (mtarld) + * bug #54485 [Serializer] Ignore when using #[Ignore] on a non-accessor (nicolas-grekas) + * bug #54242 [HttpClient] [EventSourceHttpClient] Fix consuming SSEs with \r\n separator (fancyweb) + * bug #54456 [DomCrawler] Encode html entities only if nessecary (ausi) + * bug #54471 [Filesystem] Strengthen the check of file permissions in `dumpFile` (alexandre-daubois) + * bug #54403 [FrameworkBundle] [Command] Fix #54402: Suppress PHP warning when is_readable() tries to access dirs outside of open_basedir restrictions (Jeldrik Geraedts) + * bug #54440 [Console] return null when message with name is not set (xabbuh) + * 5.4.38 (2024-04-02) * bug #54400 [HttpClient] stop all server processes after tests have run (xabbuh) From 71cb74d8ade824f08a3cf1adcdda302f5904af8b Mon Sep 17 00:00:00 2001 From: Fabien Potencier Date: Mon, 29 Apr 2024 13:17:45 +0200 Subject: [PATCH 64/65] Update CONTRIBUTORS for 5.4.39 --- CONTRIBUTORS.md | 63 +++++++++++++++++++++++++++++-------------------- 1 file changed, 38 insertions(+), 25 deletions(-) diff --git a/CONTRIBUTORS.md b/CONTRIBUTORS.md index 04ba9eca15947..2c65442650d09 100644 --- a/CONTRIBUTORS.md +++ b/CONTRIBUTORS.md @@ -14,8 +14,8 @@ The Symfony Connect username in parenthesis allows to get more information - Grégoire Pineau (lyrixx) - Thomas Calvet (fancyweb) - Christophe Coevoet (stof) - - Wouter de Jong (wouterj) - Alexandre Daubois (alexandre-daubois) + - Wouter de Jong (wouterj) - Jordi Boggiano (seldaek) - Maxime Steinhausser (ogizanagi) - Kévin Dunglas (dunglas) @@ -34,8 +34,8 @@ The Symfony Connect username in parenthesis allows to get more information - Tobias Nyholm (tobias) - Jérôme Tamarelle (gromnan) - Samuel ROZE (sroze) - - Pascal Borreli (pborreli) - Antoine Lamirault (alamirault) + - Pascal Borreli (pborreli) - Romain Neutron - HypeMC (hypemc) - Joseph Bielawski (stloyd) @@ -51,14 +51,14 @@ The Symfony Connect username in parenthesis allows to get more information - Igor Wiedler - Jan Schädlich (jschaedl) - Mathieu Lechat (mat_the_cat) - - Matthias Pigulla (mpdude) - Gabriel Ostrolucký (gadelat) + - Matthias Pigulla (mpdude) - Jonathan Wage (jwage) - Valentin Udaltsov (vudaltsov) + - Vincent Langlet (deviling) - Alexandre Salomé (alexandresalome) - Grégoire Paris (greg0ire) - William DURAND - - Vincent Langlet (deviling) - ornicar - Dany Maillard (maidmaid) - Eriksen Costa @@ -69,6 +69,7 @@ The Symfony Connect username in parenthesis allows to get more information - Francis Besset (francisbesset) - Titouan Galopin (tgalopin) - Pierre du Plessis (pierredup) + - Simon André (simonandre) - David Maicher (dmaicher) - Bulat Shakirzyanov (avalanche123) - Iltar van der Berg @@ -77,18 +78,17 @@ The Symfony Connect username in parenthesis allows to get more information - Saša Stamenković (umpirsky) - Allison Guilhem (a_guilhem) - Mathieu Piot (mpiot) - - Simon André (simonandre) - Mathieu Santostefano (welcomattic) - Alexander Schranz (alexander-schranz) - Vasilij Duško (staff) + - Tomasz Kowalczyk (thunderer) + - Mathias Arlaud (mtarld) - Sarah Khalil (saro0h) - Laurent VOULLEMIER (lvo) - Konstantin Kudryashov (everzet) - - Tomasz Kowalczyk (thunderer) - Guilhem N (guilhemn) - Bilal Amarni (bamarni) - Eriksen Costa - - Mathias Arlaud (mtarld) - Florin Patan (florinpatan) - Vladimir Reznichenko (kalessil) - Peter Rehm (rpet) @@ -96,8 +96,8 @@ The Symfony Connect username in parenthesis allows to get more information - Henrik Bjørnskov (henrikbjorn) - David Buchmann (dbu) - Andrej Hudec (pulzarraider) - - Jáchym Toušek (enumag) - Ruud Kamphuis (ruudk) + - Jáchym Toušek (enumag) - Christian Raue - Eric Clemmons (ericclemmons) - Denis (yethee) @@ -130,6 +130,7 @@ The Symfony Connect username in parenthesis allows to get more information - Vasilij Dusko | CREATION - Jordan Alliot (jalliot) - Phil E. Taylor (philetaylor) + - Joel Wurtz (brouznouf) - John Wards (johnwards) - Théo FIDRY - Antoine Hérault (herzult) @@ -137,7 +138,6 @@ The Symfony Connect username in parenthesis allows to get more information - Yanick Witschi (toflar) - Jeroen Spee (jeroens) - Arnaud Le Blanc (arnaud-lb) - - Joel Wurtz (brouznouf) - Sebastiaan Stok (sstok) - Maxime STEINHAUSSER - Rokas Mikalkėnas (rokasm) @@ -198,6 +198,7 @@ The Symfony Connect username in parenthesis allows to get more information - Daniel Gomes (danielcsgomes) - Hidenori Goto (hidenorigoto) - Niels Keurentjes (curry684) + - Dāvis Zālītis (k0d3r1s) - Arnaud Kleinpeter (nanocom) - Guilherme Blanco (guilhermeblanco) - Saif Eddin Gmati (azjezz) @@ -211,7 +212,6 @@ The Symfony Connect username in parenthesis allows to get more information - Pablo Godel (pgodel) - Florent Mata (fmata) - Alessandro Chitolina (alekitto) - - Dāvis Zālītis (k0d3r1s) - Rafael Dohms (rdohms) - Roman Martinuk (a2a4) - Thomas Landauer (thomas-landauer) @@ -262,6 +262,7 @@ The Symfony Connect username in parenthesis allows to get more information - Tyson Andre - GDIBass - Samuel NELA (snela) + - Florent Morselli (spomky_) - Vincent AUBERT (vincent) - Michael Voříšek - zairig imad (zairigimad) @@ -269,6 +270,7 @@ The Symfony Connect username in parenthesis allows to get more information - Sébastien Alfaiate (seb33300) - James Halsall (jaitsu) - Christian Scheb + - Bob van de Vijver (bobvandevijver) - Guillaume (guill) - Mikael Pajunen - Warnar Boekkooi (boekkooi) @@ -294,10 +296,10 @@ The Symfony Connect username in parenthesis allows to get more information - Chi-teck - Andre Rømcke (andrerom) - Baptiste Leduc (korbeil) + - Karoly Gossler (connorhu) - Timo Bakx (timobakx) - soyuka - Ruben Gonzalez (rubenrua) - - Bob van de Vijver (bobvandevijver) - Benjamin Dulau (dbenjamin) - Markus Fasselt (digilist) - Denis Brumann (dbrumann) @@ -308,6 +310,7 @@ The Symfony Connect username in parenthesis allows to get more information - Andreas Hucks (meandmymonkey) - Noel Guilbert (noel) - Bastien Jaillot (bastnic) + - Soner Sayakci - Stadly - Stepan Anchugov (kix) - bronze1man @@ -323,7 +326,6 @@ The Symfony Connect username in parenthesis allows to get more information - Pierre Minnieur (pminnieur) - Dominique Bongiraud - Hugo Monteiro (monteiro) - - Karoly Gossler (connorhu) - Bram Leeda (bram123) - Dmitrii Poddubnyi (karser) - Julien Pauli @@ -334,6 +336,7 @@ The Symfony Connect username in parenthesis allows to get more information - Leszek Prabucki (l3l0) - Giorgio Premi - Thomas Lallement (raziel057) + - Yassine Guedidi (yguedidi) - François Zaninotto (fzaninotto) - Dustin Whittle (dustinwhittle) - Timothée Barray (tyx) @@ -348,7 +351,6 @@ The Symfony Connect username in parenthesis allows to get more information - Michele Orselli (orso) - Sven Paulus (subsven) - Maxime Veber (nek-) - - Soner Sayakci - Valentine Boineau (valentineboineau) - Rui Marinho (ruimarinho) - Patrick Landolt (scube) @@ -367,7 +369,6 @@ The Symfony Connect username in parenthesis allows to get more information - Mantis Development - Marko Kaznovac (kaznovac) - Hidde Wieringa (hiddewie) - - Florent Morselli (spomky_) - dFayet - Rob Frawley 2nd (robfrawley) - Renan (renanbr) @@ -377,7 +378,6 @@ The Symfony Connect username in parenthesis allows to get more information - Daniel Tschinder - Christian Schmidt - Alexander Kotynia (olden) - - Yassine Guedidi (yguedidi) - Elnur Abdurrakhimov (elnur) - Manuel Reinhard (sprain) - BoShurik @@ -418,6 +418,7 @@ The Symfony Connect username in parenthesis allows to get more information - Marvin Petker - GordonsLondon - Ray + - Asis Pattisahusiwa - Philipp Cordes (corphi) - Chekote - Thomas Adam @@ -477,6 +478,7 @@ The Symfony Connect username in parenthesis allows to get more information - Thomas Bisignani (toma) - Florian Klein (docteurklein) - Damien Alexandre (damienalexandre) + - javaDeveloperKid - Manuel Kießling (manuelkiessling) - Alexey Kopytko (sanmai) - Warxcell (warxcell) @@ -487,7 +489,6 @@ The Symfony Connect username in parenthesis allows to get more information - Bertrand Zuchuat (garfield-fr) - Marc Morera (mmoreram) - Quynh Xuan Nguyen (seriquynh) - - Asis Pattisahusiwa - Gabor Toth (tgabi333) - realmfoo - Fabien S (bafs) @@ -518,6 +519,7 @@ The Symfony Connect username in parenthesis allows to get more information - Thierry T (lepiaf) - Lorenz Schori - Lukáš Holeczy (holicz) + - Jonathan H. Wage - Jeremy Livingston (jeremylivingston) - ivan - SUMIDA, Ippei (ippey_s) @@ -550,6 +552,7 @@ The Symfony Connect username in parenthesis allows to get more information - Artur Eshenbrener - Harm van Tilborg (hvt) - Thomas Perez (scullwm) + - Gwendolen Lynch - Cédric Anne - smoench - Felix Labrecque @@ -588,7 +591,6 @@ The Symfony Connect username in parenthesis allows to get more information - Kirill chEbba Chebunin - Pol Dellaiera (drupol) - Alex (aik099) - - javaDeveloperKid - Fabien Villepinte - SiD (plbsid) - Greg Thornton (xdissent) @@ -668,9 +670,9 @@ The Symfony Connect username in parenthesis allows to get more information - Dmitriy Mamontov (mamontovdmitriy) - Jan Schumann - Matheo Daninos (mathdns) + - Neil Peyssard (nepey) - Niklas Fiekas - Mark Challoner (markchalloner) - - Jonathan H. Wage - Markus Bachmann (baachi) - Matthieu Lempereur (mryamous) - Gunnstein Lye (glye) @@ -710,7 +712,6 @@ The Symfony Connect username in parenthesis allows to get more information - DerManoMann - Jérôme Tanghe (deuchnord) - Mathias STRASSER (roukmoute) - - Gwendolen Lynch - simon chrzanowski (simonch) - Kamil Kokot (pamil) - Seb Koelen @@ -905,6 +906,7 @@ The Symfony Connect username in parenthesis allows to get more information - Ramunas Pabreza (doobas) - Yuriy Vilks (igrizzli) - Terje Bråten + - Andrey Lebedev (alebedev) - Sebastian Krebs - Piotr Stankowski - Pierre-Emmanuel Tanguy (petanguy) @@ -970,7 +972,6 @@ The Symfony Connect username in parenthesis allows to get more information - Christophe Villeger (seragan) - Krystian Marcisz (simivar) - Julien Fredon - - Neil Peyssard (nepey) - Xavier Leune (xleune) - Hany el-Kerdany - Wang Jingyu @@ -1065,6 +1066,7 @@ The Symfony Connect username in parenthesis allows to get more information - Robin Lehrmann - Szijarto Tamas - Thomas P + - Stephan Vock (glaubinix) - Jaroslav Kuba - Benjamin Zikarsky (bzikarsky) - Kristijan Kanalaš (kristijan_kanalas_infostud) @@ -1149,6 +1151,7 @@ The Symfony Connect username in parenthesis allows to get more information - Ворожцов Максим (myks92) - Dalibor Karlović - Randy Geraads + - Jay Klehr - Andreas Leathley (iquito) - Vladimir Luchaninov (luchaninov) - Sebastian Grodzicki (sgrodzicki) @@ -1225,6 +1228,7 @@ The Symfony Connect username in parenthesis allows to get more information - Felds Liscia (felds) - Jérémy DECOOL (jdecool) - Sergey Panteleev + - Alexander Grimalovsky (flying) - Andrew Hilobok (hilobok) - Noah Heck (myesain) - Christian Soronellas (theunic) @@ -1421,6 +1425,7 @@ The Symfony Connect username in parenthesis allows to get more information - Michael Roterman (wtfzdotnet) - Philipp Keck - Pavol Tuka + - Shyim - Arno Geurts - Adán Lobato (adanlobato) - Ian Jenkins (jenkoian) @@ -1482,6 +1487,7 @@ The Symfony Connect username in parenthesis allows to get more information - MrMicky - Stewart Malik - Renan Taranto (renan-taranto) + - Ninos Ego - Stefan Graupner (efrane) - Gemorroj (gemorroj) - Adrien Chinour @@ -1492,6 +1498,7 @@ The Symfony Connect username in parenthesis allows to get more information - Uladzimir Tsykun - iamvar - Amaury Leroux de Lens (amo__) + - Rene de Lima Barbosa (renedelima) - Christian Jul Jensen - Alexandre GESLIN - The Whole Life to Learn @@ -1675,6 +1682,7 @@ The Symfony Connect username in parenthesis allows to get more information - Goran Juric - Laurent G. (laurentg) - Jean-Baptiste Nahan + - Thomas Decaux - Nicolas Macherey - Asil Barkin Elik (asilelik) - Bhujagendra Ishaya @@ -1740,7 +1748,6 @@ The Symfony Connect username in parenthesis allows to get more information - Denis Kop - Fabrice Locher - Kamil Szalewski (szal1k) - - Andrey Lebedev (alebedev) - Jean-Guilhem Rouel (jean-gui) - Yoann MOROCUTTI - Ivan Yivoff @@ -1769,6 +1776,7 @@ The Symfony Connect username in parenthesis allows to get more information - Hans Mackowiak - Hugo Fonseca (fonsecas72) - Marc Duboc (icemad) + - uncaught - Martynas Narbutas - Timothée BARRAY - Nilmar Sanchez Muguercia @@ -1875,6 +1883,7 @@ The Symfony Connect username in parenthesis allows to get more information - Clément - Gustavo Adrian - Jorrit Schippers (jorrit) + - Yann (yann_eugone) - Matthias Neid - Yannick - Kuzia @@ -1908,7 +1917,6 @@ The Symfony Connect username in parenthesis allows to get more information - Jason Schilling (chapterjason) - David de Boer (ddeboer) - Eno Mullaraj (emullaraj) - - Stephan Vock (glaubinix) - Guillem Fondin (guillemfondin) - Nathan PAGE (nathix) - Ryan Rogers @@ -2005,7 +2013,6 @@ The Symfony Connect username in parenthesis allows to get more information - Stefano A. (stefano93) - PierreRebeilleau - AlbinoDrought - - Jay Klehr - Sergey Yuferev - Monet Emilien - voodooism @@ -2166,7 +2173,6 @@ The Symfony Connect username in parenthesis allows to get more information - ShiraNai7 - Cedrick Oka - Antal Áron (antalaron) - - Alexander Grimalovsky (flying) - Guillaume Sainthillier (guillaume-sainthillier) - Ivan Pepelko (pepelko) - Vašek Purchart (vasek-purchart) @@ -2273,6 +2279,7 @@ The Symfony Connect username in parenthesis allows to get more information - roog - parinz1234 - Romain Geissler + - Martin Auswöger - Adrien Moiruad - Viktoriia Zolotova - Tomaz Ahlin @@ -2351,6 +2358,7 @@ The Symfony Connect username in parenthesis allows to get more information - Wouter Diesveld - Romain - Matěj Humpál + - Kasper Hansen - Amine Matmati - Kristen Gilden - caalholm @@ -2501,6 +2509,7 @@ The Symfony Connect username in parenthesis allows to get more information - Tiago Garcia (tiagojsag) - Artiom - Jakub Simon + - Eviljeks - robin.de.croock - Brandon Antonio Lorenzo - Bouke Haarsma @@ -2722,6 +2731,7 @@ The Symfony Connect username in parenthesis allows to get more information - Thomas Rothe - Edwin - Troy Crawford + - Kirill Roskolii - Jeroen van den Nieuwenhuisen - nietonfir - Andriy @@ -2933,6 +2943,7 @@ The Symfony Connect username in parenthesis allows to get more information - Joel Marcey - zolikonta - Daniel Bartoníček + - Michael Hüneburg - David Christmann - root - pf @@ -3314,6 +3325,7 @@ The Symfony Connect username in parenthesis allows to get more information - cmfcmf - sarah-eit - Michal Forbak + - CarolienBEER - Drew Butler - Alexey Berezuev - pawel-lewtak @@ -3330,7 +3342,6 @@ The Symfony Connect username in parenthesis allows to get more information - Anatol Belski - Javier - Alexis BOYER - - Shyim - bch36 - Kaipi Yann - wiseguy1394 @@ -3413,6 +3424,7 @@ The Symfony Connect username in parenthesis allows to get more information - Alex Nostadt - Michael Squires - Egor Gorbachev + - Julian Krzefski - Derek Stephen McLean - Norman Soetbeer - zorn @@ -3550,6 +3562,7 @@ The Symfony Connect username in parenthesis allows to get more information - Arkadiusz Kondas (itcraftsmanpl) - j0k (j0k) - joris de wit (jdewit) + - JG (jege) - Jérémy CROMBEZ (jeremy) - Jose Manuel Gonzalez (jgonzalez) - Joachim Krempel (jkrempel) From 2baba1875980d8f74edbd43f70881f896ca03fe8 Mon Sep 17 00:00:00 2001 From: Fabien Potencier Date: Mon, 29 Apr 2024 13:17:46 +0200 Subject: [PATCH 65/65] Update VERSION for 5.4.39 --- src/Symfony/Component/HttpKernel/Kernel.php | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/Symfony/Component/HttpKernel/Kernel.php b/src/Symfony/Component/HttpKernel/Kernel.php index aae7d8f9cd32c..d4fe96b6b7b56 100644 --- a/src/Symfony/Component/HttpKernel/Kernel.php +++ b/src/Symfony/Component/HttpKernel/Kernel.php @@ -78,12 +78,12 @@ abstract class Kernel implements KernelInterface, RebootableInterface, Terminabl */ private static $freshCache = []; - public const VERSION = '5.4.39-DEV'; + public const VERSION = '5.4.39'; public const VERSION_ID = 50439; public const MAJOR_VERSION = 5; public const MINOR_VERSION = 4; public const RELEASE_VERSION = 39; - public const EXTRA_VERSION = 'DEV'; + public const EXTRA_VERSION = ''; public const END_OF_MAINTENANCE = '11/2024'; public const END_OF_LIFE = '11/2025'; pFad - Phonifier reborn

Pfad - The Proxy pFad of © 2024 Garber Painting. All rights reserved.

Note: This service is not intended for secure transactions such as banking, social media, email, or purchasing. Use at your own risk. We assume no liability whatsoever for broken pages.


Alternative Proxies:

Alternative Proxy

pFad Proxy

pFad v3 Proxy

pFad v4 Proxy