Browse Source

Do type checks when looking for models in Controller::$uses.

This solves issues with models not being added when $uses = true.

Fixes #3774
mark_story 13 years ago
parent
commit
efd86a498a

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

@@ -723,7 +723,7 @@ class Controller extends Object implements CakeEventListener {
 		}
 
 		$this->uses = ($this->uses) ? (array)$this->uses : array();
-		if (!in_array($modelClass, $this->uses)) {
+		if (!in_array($modelClass, $this->uses, true)) {
 			$this->uses[] = $modelClass;
 		}
 

+ 17 - 4
lib/Cake/Test/Case/Controller/ControllerTest.php

@@ -447,11 +447,24 @@ class ControllerTest extends CakeTestCase {
 
 		$result = $Controller->loadModel('ControllerPost');
 		$this->assertTrue($result);
-		$this->assertTrue(is_a($Controller->ControllerPost, 'ControllerPost'));
-		$this->assertTrue(in_array('ControllerPost', $Controller->uses));
+		$this->assertInstanceOf('ControllerPost', $Controller->ControllerPost);
+		$this->assertContains('ControllerPost', $Controller->uses);
+	}
 
-		ClassRegistry::flush();
-		unset($Controller);
+/**
+ * Test loadModel() when uses = true.
+ *
+ * @return void
+ */
+	public function testLoadModelUsesTrue() {
+		$request = new CakeRequest('controller_posts/index');
+		$response = $this->getMock('CakeResponse');
+		$Controller = new Controller($request, $response);
+		$Controller->uses = true;
+
+		$Controller->loadModel('ControllerPost');
+		$this->assertInstanceOf('ControllerPost', $Controller->ControllerPost);
+		$this->assertContains('ControllerPost', $Controller->uses);
 	}
 
 /**