Skip to content

Commit 00c65cf

Browse files
author
abluchet
committed
feat Ability to configure resource_class_directories
1 parent d4d8fa8 commit 00c65cf

File tree

4 files changed

+33
-0
lines changed

4 files changed

+33
-0
lines changed

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

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -184,6 +184,12 @@ private function registerMetadataConfiguration(ContainerBuilder $container, arra
184184

185185
list($xmlResources, $yamlResources) = $this->getResourcesToWatch($container, $config['mapping']['paths']);
186186

187+
if (isset($config['resource_class_directories']) && $config['resource_class_directories']) {
188+
$container->setParameter('api_platform.resource_class_directories', array_merge(
189+
$config['resource_class_directories'], $container->getParameter('api_platform.resource_class_directories')
190+
));
191+
}
192+
187193
$container->getDefinition('api_platform.metadata.extractor.xml')->addArgument($xmlResources);
188194

189195
if (class_exists(Annotation::class)) {

src/Bridge/Symfony/Bundle/DependencyInjection/Configuration.php

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -148,6 +148,10 @@ public function getConfigTreeBuilder()
148148
->end()
149149
->end()
150150

151+
->arrayNode('resource_class_directories')
152+
->prototype('scalar')->end()
153+
->end()
154+
151155
->arrayNode('http_cache')
152156
->addDefaultsIfNotSet()
153157
->children()

tests/Bridge/Symfony/Bundle/DependencyInjection/ApiPlatformExtensionTest.php

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -247,6 +247,28 @@ public function testEnableSecurity()
247247
$this->extension->load(self::DEFAULT_CONFIG, $containerBuilder);
248248
}
249249

250+
public function testAddResourceClassDirectories()
251+
{
252+
$containerBuilderProphecy = $this->getBaseContainerBuilderProphecy();
253+
$containerBuilderProphecy->getParameter('api_platform.resource_class_directories')->shouldBeCalled()->willReturn([]);
254+
$i = 0;
255+
// it's called once from getResourcesToWatch and then if the configuration exists
256+
$containerBuilderProphecy->setParameter('api_platform.resource_class_directories', Argument::that(function ($arg) use ($i) {
257+
if (0 === $i++) {
258+
return $arg;
259+
}
260+
261+
if (!in_array('foobar', $arg, true)) {
262+
throw new \Exception('"foobar" should be in "resource_class_directories"');
263+
}
264+
265+
return $arg;
266+
}))->shouldBeCalled();
267+
$containerBuilder = $containerBuilderProphecy->reveal();
268+
269+
$this->extension->load(array_merge_recursive(self::DEFAULT_CONFIG, ['api_platform' => ['resource_class_directories' => ['foobar']]]), $containerBuilder);
270+
}
271+
250272
/**
251273
* @expectedException \ApiPlatform\Core\Exception\RuntimeException
252274
* @expectedExceptionMessageRegExp /Unsupported mapping type in ".+", supported types are XML & Yaml\./

tests/Bridge/Symfony/Bundle/DependencyInjection/ConfigurationTest.php

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -119,6 +119,7 @@ public function testDefaultConfig()
119119
'vary' => ['Accept'],
120120
'public' => null,
121121
],
122+
'resource_class_directories' => [],
122123
], $config);
123124
}
124125

0 commit comments

Comments
 (0)