/** * Perform negotiation on the provided request, return a request instance with attributes containing the preferred * types for each field handled. * * @param ServerRequestInterface $request * @return ServerRequestInterface */ public function negotiate(ServerRequestInterface $request) { if ($this->charsetNeg) { $request = $request->withAttribute(self::CHARSET_BEST, $this->negotiator->charsetBest($request->getHeaderLine('Accept'), $this->charsetAppTypes)->getType()); } if ($this->encodingNeg) { $request = $request->withAttribute(self::ENCODING_BEST, $this->negotiator->encodingBest($request->getHeaderLine('Accept-Encoding'), $this->encodingAppTypes)->getType()); } if ($this->languageNeg) { $request = $request->withAttribute(self::LANGUAGE_BEST, $this->negotiator->languageBest($request->getHeaderLine('Accept-Language'), $this->languageAppTypes)->getType()); } if ($this->mimeNeg) { $request = $request->withAttribute(self::MIME_BEST, $this->negotiator->mimeBest($request->getHeaderLine('Accept'), $this->mimeAppTypes)->getType()); } return $request; }
/** * Return the best matching charset. * * @param $appTypes * * @return TypePairInterface */ public function charsetBest($appTypes) { $request = $this->requestStack->getCurrentRequest(); $uaField = $request->server->get('HTTP_ACCEPT_CHARSET', ''); return $this->negotiate->charsetBest($uaField, $appTypes); }