統計
| ブランチ: | リビジョン:

pictcode / lib / Cake / View / MediaView.php @ master

履歴 | 表示 | アノテート | ダウンロード (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
}