/
FormatMatcher.php
58 lines (50 loc) · 1.39 KB
/
FormatMatcher.php
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
<?php
/*
* This file is part of the API Platform project.
*
* (c) Kévin Dunglas <dunglas@gmail.com>
*
* For the full copyright and license information, please view the LICENSE
* file that was distributed with this source code.
*/
declare(strict_types=1);
namespace ApiPlatform\Core\Api;
/**
* Matches a mime type to a format.
*
* @internal
*/
final class FormatMatcher
{
private $formats;
public function __construct(array $formats)
{
$normalizedFormats = [];
foreach ($formats as $format => $mimeTypes) {
$normalizedFormats[$format] = (array) $mimeTypes;
}
$this->formats = $normalizedFormats;
}
/**
* Gets the format associated with the mime type.
*
* Adapted from {@see \Symfony\Component\HttpFoundation\Request::getFormat}.
*/
public function getFormat(string $mimeType): ?string
{
$canonicalMimeType = null;
$pos = strpos($mimeType, ';');
if (false !== $pos) {
$canonicalMimeType = trim(substr($mimeType, 0, $pos));
}
foreach ($this->formats as $format => $mimeTypes) {
if (\in_array($mimeType, $mimeTypes, true)) {
return $format;
}
if (null !== $canonicalMimeType && \in_array($canonicalMimeType, $mimeTypes, true)) {
return $format;
}
}
return null;
}
}