Example #1
0
 /**
  * Negotiates the response format.
  * @param Request $request
  * @param Response $response
  * @throws ContentNegotiatorFilterException if none of the requested content types is accepted.
  */
 protected function negotiateContentType($request, $response)
 {
     if (!empty($this->formatParam) && ($format = Request::get($this->formatParam)) !== null) {
         if (in_array($format, $this->formats)) {
             $response->format = $format;
             $response->acceptMimeType = null;
             $response->acceptParams = [];
             return;
         } else {
             throw new ContentNegotiatorFilterException('The requested response format is not supported: ' . $format);
         }
     }
     $types = $request->getAcceptableContentTypes();
     if (empty($types)) {
         $types['*/*'] = [];
     }
     foreach ($types as $type => $params) {
         if (isset($this->formats[$type])) {
             $response->format = $this->formats[$type];
             $response->acceptMimeType = $type;
             $response->acceptParams = $params;
             return;
         }
     }
     if (isset($types['*/*'])) {
         // return the first format
         foreach ($this->formats as $type => $format) {
             $response->format = $this->formats[$type];
             $response->acceptMimeType = $type;
             $response->acceptParams = [];
             return;
         }
     }
     throw new ContentNegotiatorFilterException('None of your requested content types is supported.');
 }