Browse Source

Fix: Incorrect model being used as Controller::$modelClass

We cannot be sure that Controller::$uses have not been iterated, so
reset the array to use the first value.
Rachman Chavik 13 years ago
parent
commit
a63b54c34b

+ 1 - 1
lib/Cake/Controller/Controller.php

@@ -634,7 +634,7 @@ class Controller extends Object implements CakeEventListener {
 		$this->_mergeControllerVars();
 		if ($this->uses) {
 			$this->uses = (array)$this->uses;
-			list(, $this->modelClass) = pluginSplit(current($this->uses));
+			list(, $this->modelClass) = pluginSplit(reset($this->uses));
 		}
 		$this->Components->init($this);
 		return true;

+ 13 - 0
lib/Cake/Test/Case/Controller/ControllerMergeVarsTest.php

@@ -250,4 +250,17 @@ class ControllerMergeVarsTest extends CakeTestCase {
 
 		$this->assertFalse(isset($Controller->Session));
 	}
+
+/**
+ * Ensure that $modelClass is correct even when Controller::$uses
+ * has been iterated, eg: by a Component, or event handlers.
+ */
+	public function testMergeVarsModelClass() {
+		$Controller = new MergeVariablescontroller();
+		$Controller->uses = array('Test', 'TestAlias');
+		$lastModel = end($Controller->uses);
+		$Controller->constructClasses();
+		$this->assertEquals($Controller->uses[0], $Controller->modelClass);
+	}
+
 }