diff --git a/lib/Cake/Test/Case/Utility/DebuggerTest.php b/lib/Cake/Test/Case/Utility/DebuggerTest.php index a287a412d..e034f5f10 100644 --- a/lib/Cake/Test/Case/Utility/DebuggerTest.php +++ b/lib/Cake/Test/Case/Utility/DebuggerTest.php @@ -324,6 +324,7 @@ object(View) { hasRendered => false uuids => array() request => null + response => object(CakeResponse) {} elementCache => 'default' int => (int) 2 float => (float) 1.333 diff --git a/lib/Cake/View/Helper/HtmlHelper.php b/lib/Cake/View/Helper/HtmlHelper.php index 8e7d3f95e..495461c5f 100644 --- a/lib/Cake/View/Helper/HtmlHelper.php +++ b/lib/Cake/View/Helper/HtmlHelper.php @@ -30,6 +30,13 @@ App::uses('CakeResponse', 'Network'); */ class HtmlHelper extends AppHelper { +/** + * Reference to the Response object + * + * @var CakeResponse + */ + public $response; + /** * html tags used by this helper. * @@ -174,6 +181,11 @@ class HtmlHelper extends AppHelper { */ public function __construct(View $View, $settings = array()) { parent::__construct($View, $settings); + if (is_object($this->_View->response)) { + $this->response = $this->_View->response; + } else { + $this->response = new CakeResponse(array('charset' => Configure::read('App.encoding'))); + } if (!empty($settings['configFile'])) { $this->loadConfig($settings['configFile']); } @@ -1029,45 +1041,38 @@ class HtmlHelper extends AppHelper { } if (is_array($path)) { - $response = null; $sourceTags = ''; - foreach ($path as $source) { + foreach ($path as &$source) { if (is_string($source)) { $source = array( 'src' => $source, ); } if (!isset($source['type'])) { - if ($response === null) { - $response = new CakeResponse(); - } $ext = pathinfo($source['src'], PATHINFO_EXTENSION); - $source['type'] = $response->getMimeType($ext); - } - if ($type === null) { - if (preg_match('#^video/#', $source['type'])) { - $type = 'video'; - } else { - $type = 'audio'; - } + $source['type'] = $this->response->getMimeType($ext); } $source['src'] = $this->assetUrl($source['src'], $options); $sourceTags .= $this->useTag('tagselfclosing', 'source', $source); } + unset($source); $options['text'] = $sourceTags . $options['text']; unset($options['fullBase']); } else { - if ($type === null) { - $response = new CakeResponse(); - $mimeType = $response->getMimeType(pathinfo($path, PATHINFO_EXTENSION)); - if (preg_match('#^video/#', $mimeType)) { - $type = 'video'; - } else { - $type = 'audio'; - } + $options['src'] = $this->assetUrl($path, $options); + } + + if ($type === null) { + if (is_array($path)) { + $mimeType = $path[0]['type']; + } else { + $mimeType = $this->response->getMimeType(pathinfo($path, PATHINFO_EXTENSION)); + } + if (preg_match('#^video/#', $mimeType)) { + $type = 'video'; + } else { + $type = 'audio'; } - $path = $this->assetUrl($path, $options); - $options['src'] = $path; } if (isset($options['poster'])) { diff --git a/lib/Cake/View/MediaView.php b/lib/Cake/View/MediaView.php index 96fdf543b..81b7dbf45 100644 --- a/lib/Cake/View/MediaView.php +++ b/lib/Cake/View/MediaView.php @@ -63,13 +63,6 @@ class MediaView extends View { */ protected $_compressionEnabled = false; -/** - * Reference to the Response object responsible for sending the headers - * - * @var CakeResponse - */ - public $response = null; - /** * Constructor * @@ -77,11 +70,6 @@ class MediaView extends View { */ public function __construct($controller = null) { parent::__construct($controller); - if (is_object($controller) && isset($controller->response)) { - $this->response = $controller->response; - } else { - $this->response = new CakeResponse; - } } /** diff --git a/lib/Cake/View/View.php b/lib/Cake/View/View.php index a4412716e..072e96138 100644 --- a/lib/Cake/View/View.php +++ b/lib/Cake/View/View.php @@ -23,6 +23,7 @@ App::uses('Router', 'Routing'); App::uses('ViewBlock', 'View'); App::uses('CakeEvent', 'Event'); App::uses('CakeEventManager', 'Event'); +App::uses('CakeResponse', 'Network'); /** * View, the V in the MVC triad. View interacts with Helpers and view variables passed @@ -201,6 +202,13 @@ class View extends Object { */ public $request; +/** + * Reference to the Response object + * + * @var CakeResponse + */ + public $response; + /** * The Cache configuration View will use to store cached elements. Changing this will change * the default configuration elements are stored under. You can also choose a cache config @@ -306,6 +314,11 @@ class View extends Object { } $this->_eventManager = $controller->getEventManager(); } + if (is_object($controller) && isset($controller->response)) { + $this->response = $controller->response; + } else { + $this->response = new CakeResponse(array('charset' => Configure::read('App.encoding'))); + } $this->Helpers = new HelperCollection($this); $this->Blocks = new ViewBlock(); parent::__construct();