/** * Sets the response header based on type map index name. This wraps several methods * available on Cake\Network\Response. It also allows you to use Content-Type aliases. * * @param string|array $type Friendly type name, i.e. 'html' or 'xml', or a full content-type, * like 'application/x-shockwave'. * @param array $options If $type is a friendly type name that is associated with * more than one type of content, $index is used to select which content-type to use. * @return bool Returns false if the friendly type name given in $type does * not exist in the type map, or if the Content-type header has * already been set by this method. * @see RequestHandlerComponent::setContent() */ public function respondAs($type, array $options = array()) { $defaults = array('index' => null, 'charset' => null, 'attachment' => false); $options += $defaults; $cType = $type; if (strpos($type, '/') === false) { $cType = $this->response->getMimeType($type); } if (is_array($cType)) { if (isset($cType[$options['index']])) { $cType = $cType[$options['index']]; } if ($this->prefers($cType)) { $cType = $this->prefers($cType); } else { $cType = $cType[0]; } } if (!$type) { return false; } if (empty($this->request->params['requested'])) { $this->response->type($cType); } if (!empty($options['charset'])) { $this->response->charset($options['charset']); } if (!empty($options['attachment'])) { $this->response->download($options['attachment']); } return true; }
/** * Tests the download method * * @return void */ public function testDownload() { $response = new Response(); $expected = ['Content-Disposition' => 'attachment; filename="myfile.mp3"']; $response->download('myfile.mp3'); $this->assertEquals($expected, $response->header()); }