Skip to content

Commit 2fb942d

Browse files
committed
Merge remote-tracking branch 'upstream/4.4' into 5.0
2 parents 715bba5 + 1ea9db8 commit 2fb942d

6 files changed

Lines changed: 33 additions & 12 deletions

File tree

‎composer.json‎

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -38,7 +38,7 @@
3838
"doctrine/orm": "<2.14.0 || 3.0.0",
3939
"doctrine/mongodb-odm": "<2.4",
4040
"doctrine/persistence": "<1.3",
41-
"symfony/framework-bundle": "6.4.6 || 7.0.6",
41+
"symfony/framework-bundle": "<7.4",
4242
"symfony/object-mapper": "<7.3.4",
4343
"symfony/var-exporter": "<6.1.1",
4444
"phpunit/phpunit": "<9.5",

‎src/OpenApi/Serializer/LegacyOpenApiNormalizer.php‎

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -41,6 +41,7 @@ public function normalize(mixed $data, ?string $format = null, array $context =
4141
}
4242

4343
$openapi['openapi'] = '3.0.0';
44+
unset($openapi['jsonSchemaDialect'], $openapi['webhooks']);
4445

4546
foreach ($openapi['components']['schemas'] ?? [] as $name => $component) {
4647
$openapi['components']['schemas'][$name] = $this->downgradeSchema($component);

‎src/OpenApi/Tests/Serializer/LegacyOpenApiNormalizerTest.php‎

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -346,6 +346,21 @@ public function testWalksPathOperationSchemas(): void
346346
$this->assertSame(['type' => 'string', 'nullable' => true], $schema['properties']['name']);
347347
}
348348

349+
public function testRemovesKeysNotDefinedIn30(): void
350+
{
351+
$document = [
352+
'openapi' => '3.1.0',
353+
'jsonSchemaDialect' => 'https://spec.openapis.org/oas/3.1/dialect/base',
354+
'components' => ['schemas' => []],
355+
'webhooks' => new \ArrayObject(),
356+
];
357+
358+
$normalizer = $this->buildNormalizer($document);
359+
$result = $normalizer->normalize(new \stdClass(), null, ['spec_version' => '3.0.0']);
360+
361+
$this->assertSame(['openapi' => '3.0.0', 'components' => ['schemas' => []]], $result);
362+
}
363+
349364
private function buildNormalizer(array $document): LegacyOpenApiNormalizer
350365
{
351366
$decorated = $this->prophesize(NormalizerInterface::class);

‎src/Symfony/Bundle/DependencyInjection/ApiPlatformExtension.php‎

Lines changed: 1 addition & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -70,7 +70,6 @@
7070
use PHPStan\PhpDocParser\Parser\PhpDocParser;
7171
use Ramsey\Uuid\Uuid;
7272
use Symfony\AI\McpBundle\McpBundle;
73-
use Symfony\Bundle\FrameworkBundle\Command\TranslationExtractCommand as FrameworkTranslationExtractCommand;
7473
use Symfony\Bundle\FrameworkBundle\Controller\ControllerHelper;
7574
use Symfony\Component\Config\FileLocator;
7675
use Symfony\Component\Config\Resource\DirectoryResource;
@@ -89,7 +88,6 @@
8988
use Symfony\Component\ObjectMapper\ObjectMapperInterface;
9089
use Symfony\Component\Serializer\NameConverter\CamelCaseToSnakeCaseNameConverter;
9190
use Symfony\Component\Serializer\Normalizer\NumberNormalizer;
92-
use Symfony\Component\Translation\Command\TranslationExtractCommand;
9391
use Symfony\Component\Uid\AbstractUid;
9492
use Symfony\Component\Validator\Validator\ValidatorInterface;
9593
use Symfony\Component\Yaml\Yaml;
@@ -210,10 +208,9 @@ public function load(array $configs, ContainerBuilder $container): void
210208
$this->registerLinkSecurityConfiguration($loader, $config);
211209
$this->registerJsonStreamerConfiguration($container, $loader, $formats, $config);
212210

213-
// TranslationExtractCommand was introduced in framework-bundle/7.3 with the object mapper service.
214211
// willBeAvailable mirrors FrameworkBundle's own gate: when symfony/object-mapper is in dev-only,
215212
// FrameworkBundle skips object_mapper.php and the "object_mapper" service we alias to does not exist.
216-
if (class_exists(ObjectMapper::class) && (class_exists(TranslationExtractCommand::class) || class_exists(FrameworkTranslationExtractCommand::class)) && ContainerBuilder::willBeAvailable('symfony/object-mapper', ObjectMapperInterface::class, ['symfony/framework-bundle'])) {
213+
if (class_exists(ObjectMapper::class) && ContainerBuilder::willBeAvailable('symfony/object-mapper', ObjectMapperInterface::class, ['symfony/framework-bundle'])) {
217214
$loader->load('state/object_mapper.php');
218215
$loader->load($config['use_symfony_listeners'] ? 'symfony/object_mapper.php' : 'state/object_mapper_processor.php');
219216
}

‎src/Symfony/Tests/Bundle/DependencyInjection/ApiPlatformExtensionTest.php‎

Lines changed: 12 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -40,8 +40,9 @@
4040
use Symfony\Component\DependencyInjection\ContainerBuilder;
4141
use Symfony\Component\DependencyInjection\ParameterBag\ParameterBag;
4242
use Symfony\Component\HttpFoundation\Response;
43+
use Symfony\Component\ObjectMapper\ObjectMapper;
44+
use Symfony\Component\ObjectMapper\ObjectMapperInterface;
4345
use Symfony\Component\Serializer\NameConverter\MetadataAwareNameConverter;
44-
use Symfony\Component\Translation\Command\TranslationExtractCommand;
4546

4647
class ApiPlatformExtensionTest extends TestCase
4748
{
@@ -190,16 +191,20 @@ private function assertServiceHasTags(string $service, array $tags = []): void
190191

191192
#[RunInSeparateProcess]
192193
#[PreserveGlobalState(false)]
193-
public function testObjectMapperDoesNotLoadDeprecatedTranslationCommand(): void
194+
public function testObjectMapperGateDoesNotAutoloadTranslationCommands(): void
194195
{
195-
if (!class_exists(TranslationExtractCommand::class)) {
196-
self::markTestSkipped('Requires the Symfony 8.2 translation command.');
197-
}
196+
spl_autoload_register(static function (string $class): void {
197+
if ('Symfony\\Component\\Translation\\Command\\TranslationExtractCommand' === $class || FrameworkTranslationExtractCommand::class === $class) {
198+
throw new \Error(\sprintf('Class "%s" must not be autoloaded.', $class));
199+
}
200+
}, true, true);
198201

199202
(new ApiPlatformExtension())->load(self::DEFAULT_CONFIG, $this->container);
200203

201-
self::assertTrue($this->container->hasDefinition('api_platform.object_mapper.metadata_factory'));
202-
self::assertFalse(class_exists(FrameworkTranslationExtractCommand::class, false));
204+
self::assertSame(
205+
class_exists(ObjectMapper::class) && ContainerBuilder::willBeAvailable('symfony/object-mapper', ObjectMapperInterface::class, ['symfony/framework-bundle']),
206+
$this->container->hasDefinition('api_platform.object_mapper.metadata_factory')
207+
);
203208
}
204209

205210
public function testCommonConfiguration(): void

‎src/Symfony/composer.json‎

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -69,6 +69,9 @@
6969
"symfony/validator": "^7.4 || ^8.0",
7070
"webonyx/graphql-php": "^15.0"
7171
},
72+
"conflict": {
73+
"symfony/framework-bundle": "<7.4"
74+
},
7275
"suggest": {
7376
"ext-deepclone": "To speed up the PHP files metadata cache with symfony/var-exporter 8.1+ (install symfony/deepclone with PIE).",
7477
"api-platform/doctrine-orm": "To support Doctrine ORM.",

0 commit comments

Comments
 (0)