Skip to content

Commit 4510664

Browse files
committed
feat(metadata): add support for stateOptions in YAML and XML for Doctrine ORM/ODM
1 parent cff61ea commit 4510664

File tree

3 files changed

+51
-12
lines changed

3 files changed

+51
-12
lines changed

src/Metadata/Extractor/XmlResourceExtractor.php

Lines changed: 21 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,9 @@
1313

1414
namespace ApiPlatform\Metadata\Extractor;
1515

16-
use ApiPlatform\Elasticsearch\State\Options;
16+
use ApiPlatform\Doctrine\Odm\State\Options as OdmOptions;
17+
use ApiPlatform\Doctrine\Orm\State\Options as OrmOptions;
18+
use ApiPlatform\Elasticsearch\State\Options as ElasticsearchOptions;
1719
use ApiPlatform\Metadata\Exception\InvalidArgumentException;
1820
use ApiPlatform\Metadata\GetCollection;
1921
use ApiPlatform\Metadata\HeaderParameter;
@@ -454,14 +456,24 @@ private function buildStateOptions(\SimpleXMLElement $resource): ?OptionsInterfa
454456
if (!$stateOptions) {
455457
return null;
456458
}
457-
$elasticsearchOptions = $stateOptions->elasticsearchOptions ?? null;
458-
if ($elasticsearchOptions) {
459-
if (class_exists(Options::class)) {
460-
return new Options(
461-
isset($elasticsearchOptions['index']) ? (string) $elasticsearchOptions['index'] : null,
462-
isset($elasticsearchOptions['type']) ? (string) $elasticsearchOptions['type'] : null,
463-
);
464-
}
459+
460+
if (isset($stateOptions->elasticsearchOptions) && class_exists(ElasticsearchOptions::class)) {
461+
return new ElasticsearchOptions(
462+
isset($stateOptions->elasticsearchOptions['index']) ? (string) $stateOptions->elasticsearchOptions['index'] : null,
463+
isset($stateOptions->elasticsearchOptions['type']) ? (string) $stateOptions->elasticsearchOptions['type'] : null,
464+
);
465+
}
466+
467+
if (isset($stateOptions->doctrineOdmOptions) && class_exists(OdmOptions::class)) {
468+
return new OdmOptions(
469+
isset($stateOptions->doctrineOdmOptions['documentClass']) ? (string) $stateOptions->doctrineOdmOptions['documentClass'] : null,
470+
);
471+
}
472+
473+
if (isset($stateOptions->doctrineOrmOptions) && class_exists(OrmOptions::class)) {
474+
return new OrmOptions(
475+
isset($stateOptions->doctrineOrmOptions['entityClass']) ? (string) $stateOptions->doctrineOrmOptions['entityClass'] : null,
476+
);
465477
}
466478

467479
return null;

src/Metadata/Extractor/YamlResourceExtractor.php

Lines changed: 16 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,9 @@
1313

1414
namespace ApiPlatform\Metadata\Extractor;
1515

16-
use ApiPlatform\Elasticsearch\State\Options;
16+
use ApiPlatform\Doctrine\Odm\State\Options as OdmOptions;
17+
use ApiPlatform\Doctrine\Orm\State\Options as OrmOptions;
18+
use ApiPlatform\Elasticsearch\State\Options as ElasticsearchOptions;
1719
use ApiPlatform\Metadata\Exception\InvalidArgumentException;
1820
use ApiPlatform\Metadata\GetCollection;
1921
use ApiPlatform\Metadata\HeaderParameter;
@@ -418,9 +420,20 @@ private function buildStateOptions(array $resource): ?OptionsInterface
418420
$configuration = reset($stateOptions);
419421
switch (key($stateOptions)) {
420422
case 'elasticsearchOptions':
421-
if (class_exists(Options::class)) {
422-
return new Options($configuration['index'] ?? null, $configuration['type'] ?? null);
423+
if (class_exists(ElasticsearchOptions::class)) {
424+
return new ElasticsearchOptions($configuration['index'] ?? null, $configuration['type'] ?? null);
423425
}
426+
break;
427+
case 'doctrineOdmOptions':
428+
if (class_exists(OdmOptions::class)) {
429+
return new OdmOptions($configuration['documentClass'] ?? null);
430+
}
431+
break;
432+
case 'doctrineOrmOptions':
433+
if (class_exists(OrmOptions::class)) {
434+
return new OrmOptions($configuration['entityClass'] ?? null);
435+
}
436+
break;
424437
}
425438

426439
return null;

src/Metadata/Extractor/schema/resources.xsd

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -386,6 +386,8 @@
386386
<xsd:complexType name="stateOptions">
387387
<xsd:choice>
388388
<xsd:element ref="elasticsearchOptions"/>
389+
<xsd:element ref="doctrineOdmOptions"/>
390+
<xsd:element ref="doctrineOrmOptions"/>
389391
</xsd:choice>
390392
</xsd:complexType>
391393

@@ -396,6 +398,18 @@
396398
</xsd:complexType>
397399
</xsd:element>
398400

401+
<xsd:element name="doctrineOdmOptions">
402+
<xsd:complexType>
403+
<xsd:attribute name="documentClass" type="xsd:string"/>
404+
</xsd:complexType>
405+
</xsd:element>
406+
407+
<xsd:element name="doctrineOrmOptions">
408+
<xsd:complexType>
409+
<xsd:attribute name="entityClass" type="xsd:string"/>
410+
</xsd:complexType>
411+
</xsd:element>
412+
399413
<xsd:element name="link">
400414
<xsd:complexType>
401415
<xsd:attribute name="rel" type="xsd:string"/>

0 commit comments

Comments
 (0)