diff --git a/src/Metadata/Extractor/YamlResourceExtractor.php b/src/Metadata/Extractor/YamlResourceExtractor.php index f73d3a6290..60aed97291 100644 --- a/src/Metadata/Extractor/YamlResourceExtractor.php +++ b/src/Metadata/Extractor/YamlResourceExtractor.php @@ -356,6 +356,8 @@ private function buildOperations(array $resource, array $root): ?array } $data[] = array_merge($datum, [ + 'method' => $this->phpize($operation, 'method', 'string'), + 'routeName' => $this->phpize($operation, 'routeName', 'string'), 'read' => $this->phpize($operation, 'read', 'bool'), 'deserialize' => $this->phpize($operation, 'deserialize', 'bool'), 'validate' => $this->phpize($operation, 'validate', 'bool'), diff --git a/src/Metadata/Tests/Extractor/YamlExtractorTest.php b/src/Metadata/Tests/Extractor/YamlExtractorTest.php index 62d820e1c8..948bf2766b 100644 --- a/src/Metadata/Tests/Extractor/YamlExtractorTest.php +++ b/src/Metadata/Tests/Extractor/YamlExtractorTest.php @@ -251,6 +251,8 @@ public function testValidYaml(): void [ 'name' => null, 'class' => GetCollection::class, + 'method' => null, + 'routeName' => null, 'uriTemplate' => '/users/{author}/programs{._format}', 'shortName' => null, 'description' => 'User programs', @@ -337,6 +339,8 @@ public function testValidYaml(): void [ 'name' => null, 'class' => Get::class, + 'method' => null, + 'routeName' => null, 'uriTemplate' => '/users/{userId}/programs/{id}{._format}', 'shortName' => null, 'description' => 'User programs', @@ -604,6 +608,14 @@ public function testExtendingYamlResourcesByMultipleYamlFiles(): void $this->assertCount(1, $resources[User::class][1]['operations']); } + public function testOperationMethodAndRouteName(): void + { + $operations = (new YamlResourceExtractor([__DIR__.'/yaml/operation-method-route-name.yaml']))->getResources()[Program::class][0]['operations']; + + $this->assertSame('PATCH', $operations[0]['method']); + $this->assertSame('program_post_publication', $operations[1]['routeName']); + } + public function testContainerParametersAreResolved(): void { $parameters = [ diff --git a/src/Metadata/Tests/Extractor/yaml/operation-method-route-name.yaml b/src/Metadata/Tests/Extractor/yaml/operation-method-route-name.yaml new file mode 100644 index 0000000000..e8425c9b13 --- /dev/null +++ b/src/Metadata/Tests/Extractor/yaml/operation-method-route-name.yaml @@ -0,0 +1,10 @@ +resources: + ApiPlatform\Metadata\Tests\Fixtures\ApiResource\Program: + - operations: + custom_patch: + class: ApiPlatform\Metadata\HttpOperation + method: PATCH + uriTemplate: /programs/{id}/custom + post_publication: + class: ApiPlatform\Metadata\Post + routeName: program_post_publication