public function ResourceResponseSubscriber::getResponseFormat in Drupal 10
Same name and namespace in other branches
- 8 core/modules/rest/src/EventSubscriber/ResourceResponseSubscriber.php \Drupal\rest\EventSubscriber\ResourceResponseSubscriber::getResponseFormat()
- 9 core/modules/rest/src/EventSubscriber/ResourceResponseSubscriber.php \Drupal\rest\EventSubscriber\ResourceResponseSubscriber::getResponseFormat()
Determines the format to respond in.
Respects the requested format if one is specified. However, it is common to forget to specify a response format in case of a POST or PATCH. Rather than simply throwing an error, we apply the robustness principle: when POSTing or PATCHing using a certain format, you probably expect a response in that same format.
Parameters
\Drupal\Core\Routing\RouteMatchInterface $route_match: The current route match.
\Symfony\Component\HttpFoundation\Request $request: The current request.
Return value
string The response format.
1 call to ResourceResponseSubscriber::getResponseFormat()
- ResourceResponseSubscriber::onResponse in core/
modules/ rest/ src/ EventSubscriber/ ResourceResponseSubscriber.php - Serializes ResourceResponse responses' data, and removes that data.
File
- core/
modules/ rest/ src/ EventSubscriber/ ResourceResponseSubscriber.php, line 96
Class
- ResourceResponseSubscriber
- Response subscriber that serializes and removes ResourceResponses' data.
Namespace
Drupal\rest\EventSubscriberCode
public function getResponseFormat(RouteMatchInterface $route_match, Request $request) {
$route = $route_match
->getRouteObject();
$acceptable_response_formats = $route
->hasRequirement('_format') ? explode('|', $route
->getRequirement('_format')) : [];
$acceptable_request_formats = $route
->hasRequirement('_content_type_format') ? explode('|', $route
->getRequirement('_content_type_format')) : [];
$acceptable_formats = $request
->isMethodCacheable() ? $acceptable_response_formats : $acceptable_request_formats;
$requested_format = $request
->getRequestFormat();
$content_type_format = $request
->getContentType();
// If an acceptable response format is requested, then use that. Otherwise,
// including and particularly when the client forgot to specify a response
// format, then use heuristics to select the format that is most likely
// expected.
if (in_array($requested_format, $acceptable_response_formats, TRUE)) {
return $requested_format;
}
// If a request body is present, then use the format corresponding to the
// request body's Content-Type for the response, if it's an acceptable
// format for the request.
if (!empty($request
->getContent()) && in_array($content_type_format, $acceptable_request_formats, TRUE)) {
return $content_type_format;
}
// Otherwise, use the first acceptable format.
if (!empty($acceptable_formats)) {
return $acceptable_formats[0];
}
// Sometimes, there are no acceptable formats, e.g. DELETE routes.
return NULL;
}