From f9d27b6291c16f5a1fd44dde047dffc5b2062e43 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Florian=20Kr=C3=A4mer?= Date: Thu, 24 Jan 2013 18:38:39 +0100 Subject: [PATCH] Refactoring the Controller::render method, moved the part that constructs the view instance into Controller::_view() for easier overloading this part and better modularization --- lib/Cake/Controller/Controller.php | 33 ++++++++++++++++++------------ 1 file changed, 20 insertions(+), 13 deletions(-) diff --git a/lib/Cake/Controller/Controller.php b/lib/Cake/Controller/Controller.php index b71a1126d3f..9c88641b5a4 100644 --- a/lib/Cake/Controller/Controller.php +++ b/lib/Cake/Controller/Controller.php @@ -930,14 +930,7 @@ public function render($view = null, $layout = null) { } } - $viewClass = $this->viewClass; - if ($this->viewClass != 'View') { - list($plugin, $viewClass) = pluginSplit($viewClass, true); - $viewClass = $viewClass . 'View'; - App::uses($viewClass, $plugin . 'View'); - } - - $View = new $viewClass($this); + $this->View = $this->_view(); $models = ClassRegistry::keys(); foreach ($models as $currentModel) { @@ -946,15 +939,13 @@ public function render($view = null, $layout = null) { $className = get_class($currentObject); list($plugin) = pluginSplit(App::location($className)); $this->request->params['models'][$currentObject->alias] = compact('plugin', 'className'); - $View->validationErrors[$currentObject->alias] =& $currentObject->validationErrors; + $this->View->validationErrors[$currentObject->alias] =& $currentObject->validationErrors; } } $this->autoRender = false; - $this->View = $View; - $this->response->body($View->render($view, $layout)); - return $this->response; - } + $this->response->body($this->View->render($view, $layout)); + return $this->response; } /** * Returns the referring URL for this request. @@ -1224,4 +1215,20 @@ protected function _scaffoldError($method) { return $this->scaffoldError($method); } +/** + * Constructs the view class based on the controllers properties + * + * @return View + */ + protected function _view() { + $viewClass = $this->viewClass; + if ($this->viewClass != 'View') { + list($plugin, $viewClass) = pluginSplit($viewClass, true); + $viewClass = $viewClass . 'View'; + App::uses($viewClass, $plugin . 'View'); + } + + return new $viewClass($this); + } + }