Blame | Last modification | View Log | RSS feed
<?php/*** Methods to display or download any type of file** CakePHP(tm) : Rapid Development Framework (http://cakephp.org)* Copyright (c) Cake Software Foundation, Inc. (http://cakefoundation.org)** Licensed under The MIT License* For full copyright and license information, please see the LICENSE.txt* Redistributions of files must retain the above copyright notice.** @copyright Copyright (c) Cake Software Foundation, Inc. (http://cakefoundation.org)* @link http://cakephp.org CakePHP(tm) Project* @package Cake.View* @since CakePHP(tm) v 1.2.0.5714* @license http://www.opensource.org/licenses/mit-license.php MIT License*/App::uses('View', 'View');App::uses('CakeRequest', 'Network');/*** Media View provides a custom view implementation for sending files to visitors. Its great* for making the response of a controller action be a file that is saved somewhere on the filesystem.** An example use comes from the CakePHP internals. MediaView is used to serve plugin and theme assets,* as they are not normally accessible from an application's webroot. Unlike other views, MediaView* uses several viewVars that have special meaning:** - `id` The filename on the server's filesystem, including extension.* - `name` The filename that will be sent to the user, specified without the extension.* - `download` Set to true to set a `Content-Disposition` header. This is ideal for file downloads.* - `path` The absolute path, including the trailing / on the server's filesystem to `id`.* - `mimeType` The mime type of the file if CakeResponse doesn't know about it.* Must be an associative array with extension as key and mime type as value eg. array('ini' => 'text/plain')** ### Usage** ```* class ExampleController extends AppController {* public function download() {* $this->viewClass = 'Media';* $params = array(* 'id' => 'example.zip',* 'name' => 'example',* 'download' => true,* 'extension' => 'zip',* 'path' => APP . 'files' . DS* );* $this->set($params);* }* }* ```** @package Cake.View* @deprecated 3.0.0 Deprecated since version 2.3, use CakeResponse::file() instead*/class MediaView extends View {/*** Display or download the given file** @param string $view Not used* @param string $layout Not used* @return void*/public function render($view = null, $layout = null) {$name = $extension = $download = $id = $modified = $path = $cache = $mimeType = $compress = null;extract($this->viewVars, EXTR_OVERWRITE);$path = $path . $id;if (is_array($mimeType)) {$this->response->type($mimeType);}if ($cache) {if (!empty($modified) && !is_numeric($modified)) {$modified = strtotime($modified, time());} else {$modified = time();}$this->response->cache($modified, $cache);} else {$this->response->disableCache();}if ($name !== null) {if (empty($extension)) {$extension = pathinfo($id, PATHINFO_EXTENSION);}if (!empty($extension)) {$name .= '.' . $extension;}}$this->response->file($path, compact('name', 'download'));if ($compress) {$this->response->compress();}}}