Skip to content

Commit d034ede

Browse files
authored
Merge pull request #1684 from vincentchalamon/2.1
Fix Swagger.basePath
2 parents 1260139 + e352193 commit d034ede

File tree

3 files changed

+14
-3
lines changed

3 files changed

+14
-3
lines changed

src/Documentation/Action/DocumentationAction.php

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@
1515

1616
use ApiPlatform\Core\Documentation\Documentation;
1717
use ApiPlatform\Core\Metadata\Resource\Factory\ResourceNameCollectionFactoryInterface;
18+
use Symfony\Component\HttpFoundation\Request;
1819

1920
/**
2021
* Generates the API documentation.
@@ -38,8 +39,10 @@ public function __construct(ResourceNameCollectionFactoryInterface $resourceName
3839
$this->formats = $formats;
3940
}
4041

41-
public function __invoke(): Documentation
42+
public function __invoke(Request $request): Documentation
4243
{
44+
$request->attributes->set('_api_normalization_context', $request->attributes->get('_api_normalization_context', []) + ['base_url' => $request->getBaseUrl()]);
45+
4346
return new Documentation($this->resourceNameCollectionFactory->create(), $this->title, $this->description, $this->version, $this->formats);
4447
}
4548
}

src/EventListener/SerializeListener.php

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -88,7 +88,7 @@ private function serializeRawData(GetResponseForControllerResultEvent $event, Re
8888
}
8989

9090
if (\is_object($controllerResult)) {
91-
$event->setControllerResult($this->serializer->serialize($controllerResult, $request->getRequestFormat()));
91+
$event->setControllerResult($this->serializer->serialize($controllerResult, $request->getRequestFormat(), $request->attributes->get('_api_normalization_context', [])));
9292

9393
return;
9494
}

tests/Documentation/Action/DocumentationActionTest.php

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,8 @@
1818
use ApiPlatform\Core\Metadata\Resource\Factory\ResourceNameCollectionFactoryInterface;
1919
use ApiPlatform\Core\Metadata\Resource\ResourceNameCollection;
2020
use PHPUnit\Framework\TestCase;
21+
use Symfony\Component\DependencyInjection\ParameterBag\ParameterBagInterface;
22+
use Symfony\Component\HttpFoundation\Request;
2123

2224
/**
2325
* @author Amrouche Hamza <[email protected]>
@@ -26,9 +28,15 @@ class DocumentationActionTest extends TestCase
2628
{
2729
public function testDocumentationAction()
2830
{
31+
$requestProphecy = $this->prophesize(Request::class);
32+
$attributesProphecy = $this->prophesize(ParameterBagInterface::class);
2933
$resourceNameCollectionFactoryProphecy = $this->prophesize(ResourceNameCollectionFactoryInterface::class);
3034
$resourceNameCollectionFactoryProphecy->create()->willReturn(new ResourceNameCollection(['dummies']));
35+
$requestProphecy->attributes = $attributesProphecy->reveal();
36+
$requestProphecy->getBaseUrl()->willReturn('/api')->shouldBeCalledTimes(1);
37+
$attributesProphecy->get('_api_normalization_context', [])->willReturn(['foo' => 'bar'])->shouldBeCalledTimes(1);
38+
$attributesProphecy->set('_api_normalization_context', ['foo' => 'bar', 'base_url' => '/api'])->shouldBeCalledTimes(1);
3139
$documentation = new DocumentationAction($resourceNameCollectionFactoryProphecy->reveal(), 'My happy hippie api', 'lots of chocolate', '1.0.0', ['formats' => ['jsonld' => 'application/ld+json']]);
32-
$this->assertEquals(new Documentation(new ResourceNameCollection(['dummies']), 'My happy hippie api', 'lots of chocolate', '1.0.0', ['formats' => ['jsonld' => 'application/ld+json']]), $documentation());
40+
$this->assertEquals(new Documentation(new ResourceNameCollection(['dummies']), 'My happy hippie api', 'lots of chocolate', '1.0.0', ['formats' => ['jsonld' => 'application/ld+json']]), $documentation($requestProphecy->reveal()));
3341
}
3442
}

0 commit comments

Comments
 (0)