Skip to content

Commit e5229fc

Browse files
authored
Generate full URL, including getSchemeAndHttpHost
1 parent c4bbdfe commit e5229fc

File tree

1 file changed

+13
-8
lines changed

1 file changed

+13
-8
lines changed

src/Serializer/JsonApiSerializer.php

+13-8
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@
1717
use RuntimeException;
1818
use Symfony\Bundle\FrameworkBundle\Routing\Router;
1919
use Exception;
20+
use Symfony\Component\HttpFoundation\Request;
2021

2122
/**
2223
* Class JsonApiSerializer
@@ -31,6 +32,7 @@ class JsonApiSerializer extends \NilPortugues\Api\JsonApi\JsonApiSerializer
3132
public function __construct(JsonApiTransformer $transformer, Router $router)
3233
{
3334
$this->mapUrls($transformer, $router);
35+
3436
parent::__construct($transformer);
3537
}
3638

@@ -40,6 +42,9 @@ public function __construct(JsonApiTransformer $transformer, Router $router)
4042
*/
4143
private function mapUrls(JsonApiTransformer $transformer, Router $router)
4244
{
45+
$request = Request::createFromGlobals();
46+
$baseUrl = $request->getSchemeAndHttpHost();
47+
4348
$reflectionClass = new ReflectionClass($transformer);
4449
$reflectionProperty = $reflectionClass->getProperty('mappings');
4550
$reflectionProperty->setAccessible(true);
@@ -48,14 +53,14 @@ private function mapUrls(JsonApiTransformer $transformer, Router $router)
4853
foreach ($mappings as &$mapping) {
4954
$mappingClass = new ReflectionClass($mapping);
5055

51-
$this->setUrlWithReflection($router, $mapping, $mappingClass, 'resourceUrlPattern');
52-
$this->setUrlWithReflection($router, $mapping, $mappingClass, 'selfUrl');
56+
$this->setUrlWithReflection($router, $mapping, $mappingClass, 'resourceUrlPattern', $baseUrl);
57+
$this->setUrlWithReflection($router, $mapping, $mappingClass, 'selfUrl', $baseUrl);
5358

5459
$mappingProperty = $mappingClass->getProperty('otherUrls');
5560
$mappingProperty->setAccessible(true);
5661
$otherUrls = $mappingProperty->getValue($mapping);
5762
foreach ($otherUrls as &$url) {
58-
$url = $this->getUrlPattern($router, $url);
63+
$url = $this->getUrlPattern($router, $url, $baseUrl);
5964
}
6065
$mappingProperty->setValue($mapping, $otherUrls);
6166

@@ -64,7 +69,7 @@ private function mapUrls(JsonApiTransformer $transformer, Router $router)
6469
$relationshipSelfUrl = $mappingProperty->getValue($mapping);
6570
foreach ($relationshipSelfUrl as &$urlMember) {
6671
foreach ($urlMember as &$url) {
67-
$url = $this->getUrlPattern($router, $url);
72+
$url = $this->getUrlPattern($router, $url, $baseUrl);
6873
}
6974
}
7075
$mappingProperty->setValue($mapping, $relationshipSelfUrl);
@@ -79,12 +84,12 @@ private function mapUrls(JsonApiTransformer $transformer, Router $router)
7984
* @param ReflectionClass $mappingClass
8085
* @param string $property
8186
*/
82-
private function setUrlWithReflection(Router $router, Mapping $mapping, ReflectionClass $mappingClass, $property)
87+
private function setUrlWithReflection(Router $router, Mapping $mapping, ReflectionClass $mappingClass, $property, $baseUrl)
8388
{
8489
$mappingProperty = $mappingClass->getProperty($property);
8590
$mappingProperty->setAccessible(true);
8691
$value = $mappingProperty->getValue($mapping);
87-
$value = $this->getUrlPattern($router, $value);
92+
$value = $this->getUrlPattern($router, $value, $baseUrl);
8893
$mappingProperty->setValue($mapping, $value);
8994
}
9095

@@ -96,7 +101,7 @@ private function setUrlWithReflection(Router $router, Mapping $mapping, Reflecti
96101
*
97102
* @throws RuntimeException
98103
*/
99-
private function getUrlPattern(Router $router, $routeNameFromMappingFile)
104+
private function getUrlPattern(Router $router, $routeNameFromMappingFile, $baseUrl)
100105
{
101106
if (!empty($routeNameFromMappingFile)) {
102107
try {
@@ -117,7 +122,7 @@ private function getUrlPattern(Router $router, $routeNameFromMappingFile)
117122
$pattern = \array_combine($matches[1], $matches[0]);
118123
}
119124

120-
return \urldecode($router->generate($routeNameFromMappingFile, $pattern, true));
125+
return $baseUrl.\urldecode($router->generate($routeNameFromMappingFile, $pattern, true));
121126
}
122127

123128
return (string) $routeNameFromMappingFile;

0 commit comments

Comments
 (0)