pictcode / lib / Cake / View / MediaView.php @ ceb21f43
履歴 | 表示 | アノテート | ダウンロード (3.186 KB)
| 1 | 635eef61 | spyder1211 | <?php
|
|---|---|---|---|
| 2 | /**
|
||
| 3 | * Methods to display or download any type of file
|
||
| 4 | *
|
||
| 5 | * CakePHP(tm) : Rapid Development Framework (http://cakephp.org)
|
||
| 6 | * Copyright (c) Cake Software Foundation, Inc. (http://cakefoundation.org)
|
||
| 7 | *
|
||
| 8 | * Licensed under The MIT License
|
||
| 9 | * For full copyright and license information, please see the LICENSE.txt
|
||
| 10 | * Redistributions of files must retain the above copyright notice.
|
||
| 11 | *
|
||
| 12 | * @copyright Copyright (c) Cake Software Foundation, Inc. (http://cakefoundation.org)
|
||
| 13 | * @link http://cakephp.org CakePHP(tm) Project
|
||
| 14 | * @package Cake.View
|
||
| 15 | * @since CakePHP(tm) v 1.2.0.5714
|
||
| 16 | * @license http://www.opensource.org/licenses/mit-license.php MIT License
|
||
| 17 | */
|
||
| 18 | |||
| 19 | App::uses('View', 'View'); |
||
| 20 | App::uses('CakeRequest', 'Network'); |
||
| 21 | |||
| 22 | /**
|
||
| 23 | * Media View provides a custom view implementation for sending files to visitors. Its great
|
||
| 24 | * for making the response of a controller action be a file that is saved somewhere on the filesystem.
|
||
| 25 | *
|
||
| 26 | * An example use comes from the CakePHP internals. MediaView is used to serve plugin and theme assets,
|
||
| 27 | * as they are not normally accessible from an application's webroot. Unlike other views, MediaView
|
||
| 28 | * uses several viewVars that have special meaning:
|
||
| 29 | *
|
||
| 30 | * - `id` The filename on the server's filesystem, including extension.
|
||
| 31 | * - `name` The filename that will be sent to the user, specified without the extension.
|
||
| 32 | * - `download` Set to true to set a `Content-Disposition` header. This is ideal for file downloads.
|
||
| 33 | * - `path` The absolute path, including the trailing / on the server's filesystem to `id`.
|
||
| 34 | * - `mimeType` The mime type of the file if CakeResponse doesn't know about it.
|
||
| 35 | * Must be an associative array with extension as key and mime type as value eg. array('ini' => 'text/plain')
|
||
| 36 | *
|
||
| 37 | * ### Usage
|
||
| 38 | *
|
||
| 39 | * ```
|
||
| 40 | * class ExampleController extends AppController {
|
||
| 41 | * public function download() {
|
||
| 42 | * $this->viewClass = 'Media';
|
||
| 43 | * $params = array(
|
||
| 44 | * 'id' => 'example.zip',
|
||
| 45 | * 'name' => 'example',
|
||
| 46 | * 'download' => true,
|
||
| 47 | * 'extension' => 'zip',
|
||
| 48 | * 'path' => APP . 'files' . DS
|
||
| 49 | * );
|
||
| 50 | * $this->set($params);
|
||
| 51 | * }
|
||
| 52 | * }
|
||
| 53 | * ```
|
||
| 54 | *
|
||
| 55 | * @package Cake.View
|
||
| 56 | * @deprecated 3.0.0 Deprecated since version 2.3, use CakeResponse::file() instead
|
||
| 57 | */
|
||
| 58 | class MediaView extends View { |
||
| 59 | |||
| 60 | /**
|
||
| 61 | * Display or download the given file
|
||
| 62 | *
|
||
| 63 | * @param string $view Not used
|
||
| 64 | * @param string $layout Not used
|
||
| 65 | * @return void
|
||
| 66 | */
|
||
| 67 | public function render($view = null, $layout = null) { |
||
| 68 | $name = $extension = $download = $id = $modified = $path = $cache = $mimeType = $compress = null; |
||
| 69 | extract($this->viewVars, EXTR_OVERWRITE); |
||
| 70 | |||
| 71 | $path = $path . $id; |
||
| 72 | |||
| 73 | if (is_array($mimeType)) { |
||
| 74 | $this->response->type($mimeType); |
||
| 75 | } |
||
| 76 | |||
| 77 | if ($cache) { |
||
| 78 | if (!empty($modified) && !is_numeric($modified)) { |
||
| 79 | $modified = strtotime($modified, time()); |
||
| 80 | } else {
|
||
| 81 | $modified = time(); |
||
| 82 | } |
||
| 83 | $this->response->cache($modified, $cache); |
||
| 84 | } else {
|
||
| 85 | $this->response->disableCache();
|
||
| 86 | } |
||
| 87 | |||
| 88 | if ($name !== null) { |
||
| 89 | if (empty($extension)) { |
||
| 90 | $extension = pathinfo($id, PATHINFO_EXTENSION); |
||
| 91 | } |
||
| 92 | if (!empty($extension)) { |
||
| 93 | $name .= '.' . $extension; |
||
| 94 | } |
||
| 95 | } |
||
| 96 | $this->response->file($path, compact('name', 'download')); |
||
| 97 | |||
| 98 | if ($compress) { |
||
| 99 | $this->response->compress();
|
||
| 100 | } |
||
| 101 | } |
||
| 102 | |||
| 103 | } |