Browse Source

Make sure ComponentCollection has the controller dependency.

Add setter method as changing ComponentCollection's constructor now is
not possible. This fixes issues where components that rely on
Collection->getController() in their constructor can work properly.

Fixes #3946
mark_story 12 years ago
parent
commit
95b74bd9ef

+ 10 - 0
lib/Cake/Controller/ComponentCollection.php

@@ -55,6 +55,16 @@ class ComponentCollection extends ObjectCollection implements CakeEventListener
 	}
 
 /**
+ * Set the controller associated with the collection.
+ *
+ * @param Controller $Controller Controller to set
+ * @return void
+ */
+	public function setController(Controller $Controller) {
+		$this->_Controller = $Controller;
+	}
+
+/**
  * Get the controller associated with the collection.
  *
  * @return Controller Controller instance

+ 1 - 0
lib/Cake/TestSuite/ControllerTestCase.php

@@ -334,6 +334,7 @@ abstract class ControllerTestCase extends CakeTestCase {
 		$request = $this->getMock('CakeRequest');
 		$response = $this->getMock('CakeResponse', array('_sendHeader'));
 		$controllerObj->__construct($request, $response);
+		$controllerObj->Components->setController($controllerObj);
 
 		$config = ClassRegistry::config('Model');
 		foreach ($mocks['models'] as $model => $methods) {