From b8320fdbb7fc83d3d9e2b72cd418cf82ae52fdae Mon Sep 17 00:00:00 2001 From: mark_story Date: Mon, 26 Aug 2013 22:43:28 -0400 Subject: [PATCH] Load helpers at View construction. Loading helpers earlier in View's lifecycle allows for the removal of many duplicated code segments and a now useless property. It slightly modifies how View behaves in a test case, but that issue is easily remedied by calling loadHelpers() a second time. This primarily fixes issues where helpers may not be loaded in View subclasses if they override any of View's methods. This is particularly problematic when aliased helpers are involved. Refs #4030 --- lib/Cake/Test/Case/Utility/DebuggerTest.php | 3 ++- lib/Cake/Test/Case/View/HelperTest.php | 2 +- lib/Cake/Test/Case/View/JsonViewTest.php | 2 +- lib/Cake/View/View.php | 18 +----------------- 4 files changed, 5 insertions(+), 20 deletions(-) diff --git a/lib/Cake/Test/Case/Utility/DebuggerTest.php b/lib/Cake/Test/Case/Utility/DebuggerTest.php index a1b5fcb54..845cb30b5 100644 --- a/lib/Cake/Test/Case/Utility/DebuggerTest.php +++ b/lib/Cake/Test/Case/Utility/DebuggerTest.php @@ -334,6 +334,8 @@ object(View) { response => object(CakeResponse) {} elementCache => 'default' elementCacheSettings => array() + Html => object(HtmlHelper) {} + Form => object(FormHelper) {} int => (int) 2 float => (float) 1.333 @@ -358,7 +360,6 @@ TEXT; ) [protected] _scripts => array() [protected] _paths => array() - [protected] _helpersLoaded => false [protected] _parents => array() [protected] _current => null [protected] _currentType => '' diff --git a/lib/Cake/Test/Case/View/HelperTest.php b/lib/Cake/Test/Case/View/HelperTest.php index 96648e508..0f9b8b7f8 100644 --- a/lib/Cake/Test/Case/View/HelperTest.php +++ b/lib/Cake/Test/Case/View/HelperTest.php @@ -975,7 +975,7 @@ class HelperTest extends CakeTestCase { $Helper->OtherHelper; $result = $this->View->Helpers->enabled(); - $expected = array(); + $expected = array('Html'); $this->assertEquals($expected, $result, 'Helper helpers were attached to the collection.'); } diff --git a/lib/Cake/Test/Case/View/JsonViewTest.php b/lib/Cake/Test/Case/View/JsonViewTest.php index db30e3e85..2f390e35f 100644 --- a/lib/Cake/Test/Case/View/JsonViewTest.php +++ b/lib/Cake/Test/Case/View/JsonViewTest.php @@ -146,8 +146,8 @@ class JsonViewTest extends CakeTestCase { ) ); $Controller->set('user', $data); + $Controller->helpers = array('Paginator'); $View = new JsonView($Controller); - $View->helpers = array('Paginator'); $output = $View->render('index'); $expected = array('user' => 'fake', 'list' => array('item1', 'item2'), 'paging' => array('page' => 2)); diff --git a/lib/Cake/View/View.php b/lib/Cake/View/View.php index a189ea16b..ec2ed9ad7 100644 --- a/lib/Cake/View/View.php +++ b/lib/Cake/View/View.php @@ -253,13 +253,6 @@ class View extends Object { */ protected $_paths = array(); -/** - * Indicate that helpers have been loaded. - * - * @var boolean - */ - protected $_helpersLoaded = false; - /** * The names of views and their parents used with View::extend(); * @@ -347,6 +340,7 @@ class View extends Object { } $this->Helpers = new HelperCollection($this); $this->Blocks = new ViewBlock(); + $this->loadHelpers(); parent::__construct(); } @@ -460,9 +454,6 @@ class View extends Object { if ($this->hasRendered) { return true; } - if (!$this->_helpersLoaded) { - $this->loadHelpers(); - } $this->Blocks->set('content', ''); if ($view !== false && $viewFileName = $this->_getViewFileName($view)) { @@ -511,9 +502,6 @@ class View extends Object { return $this->Blocks->get('content'); } - if (!$this->_helpersLoaded) { - $this->loadHelpers(); - } if (empty($content)) { $content = $this->Blocks->get('content'); } @@ -881,7 +869,6 @@ class View extends Object { list(, $class) = pluginSplit($properties['class']); $this->{$class} = $this->Helpers->load($properties['class'], $properties['settings']); } - $this->_helpersLoaded = true; } /** @@ -1194,9 +1181,6 @@ class View extends Object { * @return string */ protected function _renderElement($file, $data, $options) { - if (!$this->_helpersLoaded) { - $this->loadHelpers(); - } if ($options['callbacks']) { $this->getEventManager()->dispatch(new CakeEvent('View.beforeRender', $this, array($file))); }