From a63b54c34bed2085ae5e297cc8aed255aa315fb4 Mon Sep 17 00:00:00 2001 From: Rachman Chavik Date: Fri, 24 May 2013 15:16:21 +0700 Subject: [PATCH] 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. --- lib/Cake/Controller/Controller.php | 2 +- .../Case/Controller/ControllerMergeVarsTest.php | 13 +++++++++++++ 2 files changed, 14 insertions(+), 1 deletion(-) diff --git a/lib/Cake/Controller/Controller.php b/lib/Cake/Controller/Controller.php index 9100dc5441f..38f26ba554d 100644 --- a/lib/Cake/Controller/Controller.php +++ b/lib/Cake/Controller/Controller.php @@ -634,7 +634,7 @@ public function constructClasses() { $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; diff --git a/lib/Cake/Test/Case/Controller/ControllerMergeVarsTest.php b/lib/Cake/Test/Case/Controller/ControllerMergeVarsTest.php index ad59802ab5f..c6207e19c9a 100644 --- a/lib/Cake/Test/Case/Controller/ControllerMergeVarsTest.php +++ b/lib/Cake/Test/Case/Controller/ControllerMergeVarsTest.php @@ -250,4 +250,17 @@ public function testMergeVarsNotGreedy() { $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); + } + }