/** * Determines which content types the client accepts. Acceptance is based on * the file extension parsed by the Router (if present), and by the HTTP_ACCEPT * header. Unlike Cake\Network\Request::accepts() this method deals entirely with mapped content types. * * Usage: * * `$this->RequestHandler->accepts(array('xml', 'html', 'json'));` * * Returns true if the client accepts any of the supplied types. * * `$this->RequestHandler->accepts('xml');` * * Returns true if the client accepts xml. * * @param string|array $type Can be null (or no parameter), a string type name, or an * array of types * @return mixed If null or no parameter is passed, returns an array of content * types the client accepts. If a string is passed, returns true * if the client accepts it. If an array is passed, returns true * if the client accepts one or more elements in the array. * @see RequestHandlerComponent::setContent() */ public function accepts($type = null) { $accepted = $this->request->accepts(); if (!$type) { return $this->response->mapType($accepted); } if (is_array($type)) { foreach ($type as $t) { $t = $this->mapAlias($t); if (in_array($t, $accepted)) { return true; } } return false; } if (is_string($type)) { return in_array($this->mapAlias($type), $accepted); } return false; }
/** * Content types from accepts() should respect the client's q preference values. * * @return void */ public function testAcceptWithQvalueSorting() { $request = new Request(['environment' => ['HTTP_ACCEPT' => 'text/html;q=0.8,application/json;q=0.7,application/xml;q=1.0']]); $result = $request->accepts(); $expected = ['application/xml', 'text/html', 'application/json']; $this->assertEquals($expected, $result); }