MediaView.php 3.1 KB

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