Permalink
Browse files

Changing View::element() to not overwrite viewVars with helpers that

have the same name.
Test added.
Fixes #1354
  • Loading branch information...
1 parent 48f32a1 commit a8306320717feb75f870b0c68eeeb5e708dae64f @markstory markstory committed Dec 10, 2010
View
@@ -381,8 +381,13 @@ function element($name, $params = array(), $loadHelpers = false) {
}
if (is_file($file)) {
- $params = array_merge_recursive($params, $this->loaded);
- $element = $this->_render($file, array_merge($this->viewVars, $params), $loadHelpers);
+ $vars = array_merge($this->viewVars, $params);
+ foreach ($this->loaded as $name => $helper) {
+ if (!isset($vars[$name])) {
+ $vars[$name] =& $this->loaded[$name];
+ }
+ }
+ $element = $this->_render($file, $vars, $loadHelpers);
if (isset($params['cache']) && isset($cacheFile) && isset($expires)) {
cache('views' . DS . $cacheFile, $element, $expires);
}
@@ -487,6 +487,24 @@ function testElement() {
$this->assertPattern('/non_existant_element/', $result);
}
+/**
+ * test that additional element viewVars don't get overwritten with helpers.
+ *
+ * @return void
+ */
+ function testElementParamsDontOverwriteHelpers() {
+ $Controller = new ViewPostsController();
+ $Controller->helpers = array('Form');
+
+ $View = new View($Controller);
+ $result = $View->element('type_check', array('form' => 'string'), true);
+ $this->assertEqual('string', $result);
+
+ $View->set('form', 'string');
+ $result = $View->element('type_check', array(), true);
+ $this->assertEqual('string', $result);
+ }
+
/**
* testElementCacheHelperNoCache method
*
@@ -0,0 +1 @@
+<?php echo gettype($form); ?>

0 comments on commit a830632

Please sign in to comment.