Skip to content

Commit adc989d

Browse files
committed
also register custom formats with the FormatNegotiator
1 parent 500b46c commit adc989d

File tree

3 files changed

+35
-1
lines changed

3 files changed

+35
-1
lines changed

EventListener/MimeTypeListener.php

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,8 @@
1111

1212
namespace FOS\RestBundle\EventListener;
1313

14+
use FOS\RestBundle\Util\FormatNegotiator;
15+
1416
use Symfony\Component\HttpKernel\Event\GetResponseEvent;
1517
use Symfony\Component\HttpKernel\HttpKernelInterface;
1618

@@ -26,14 +28,19 @@ class MimeTypeListener
2628
*/
2729
private $mimeTypes;
2830

31+
/**
32+
* @var FormatNegotiator
33+
*/
34+
private $formatNegotiator;
2935
/**
3036
* Constructor.
3137
*
3238
* @param array $mimeTypes key format, value mime type
3339
*/
34-
public function __construct(array $mimeTypes)
40+
public function __construct(array $mimeTypes, FormatNegotiator $formatNegotiator)
3541
{
3642
$this->mimeTypes = $mimeTypes;
43+
$this->formatNegotiator = $formatNegotiator;
3744
}
3845

3946
/**
@@ -48,6 +55,7 @@ public function onKernelRequest(GetResponseEvent $event)
4855
if (HttpKernelInterface::MASTER_REQUEST === $event->getRequestType()) {
4956
foreach ($this->mimeTypes as $format => $mimeType) {
5057
$request->setFormat($format, $mimeType);
58+
$this->formatNegotiator->registerFormat($format, (array) $mimeType, true);
5159
}
5260
}
5361
}

Resources/config/mime_type_listener.xml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@
99
<service id="fos_rest.mime_type_listener" class="FOS\RestBundle\EventListener\MimeTypeListener">
1010
<tag name="kernel.event_listener" event="kernel.request" method="onKernelRequest" priority="200" />
1111
<argument>%fos_rest.mime_types%</argument>
12+
<argument type="service" id="fos_rest.format_negotiator" />
1213
</service>
1314

1415
</services>

Util/FormatNegotiator.php

Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -54,4 +54,29 @@ public function getBestFormat(Request $request, array $priorities, $preferExtens
5454

5555
return $this->formatNegotiator->getBestFormat($acceptHeader, $priorities);
5656
}
57+
58+
/**
59+
* Register a new format with its mime types.
60+
*
61+
* @param string $format
62+
* @param array $mimeTypes
63+
* @param boolean $override
64+
*/
65+
public function registerFormat($format, array $mimeTypes, $override = false)
66+
{
67+
$this->formatNegotiator->registerFormat($format, $mimeTypes, $override);
68+
}
69+
70+
/**
71+
* Returns the format for a given mime type, or null
72+
* if not found.
73+
*
74+
* @param string $mimeType
75+
*
76+
* @return string|null
77+
*/
78+
public function getFormat($mimeType)
79+
{
80+
$this->formatNegotiator->getFormat($mimeType);
81+
}
5782
}

0 commit comments

Comments
 (0)