pictcode / lib / Cake / View / MediaView.php @ 0b1b8047
履歴 | 表示 | アノテート | ダウンロード (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 | } |