Browse Source

Merge pull request #72 from chrissPony/master

added view vars to serialize
Mark 11 years ago
parent
commit
2f1404f699

+ 5 - 1
Controller/Component/AjaxComponent.php

@@ -112,7 +112,11 @@ class AjaxComponent extends Component {
 
 		$this->Controller->autoRender = true;
 		$this->Controller->set('_redirect', compact('url', 'status', 'exit'));
-		$this->Controller->set('_serialize', array('_redirect'));
+		$serializeKeys = array('_redirect');
+		if (!empty($this->Controller->viewVars['_serialize'])) {
+			$serializeKeys = array_merge($serializeKeys, $this->Controller->viewVars['_serialize']);
+		}
+		$this->Controller->set('_serialize', $serializeKeys);
 
 		return false;
 	}

+ 47 - 0
Test/Case/Controller/Component/AjaxComponentTest.php

@@ -130,6 +130,53 @@ class AjaxComponentTest extends CakeTestCase {
 		$this->assertNull($session);
 	}
 
+	/**
+	 * AjaxComponentTest::testSetVars()
+	 *
+	 * @return void
+	 */
+	public function testSetVars() {
+		$_SERVER['HTTP_X_REQUESTED_WITH'] = 'XMLHttpRequest';
+
+		$this->Controller->Components->unload('Ajax');
+
+		$content = array('id' => 1, 'title' => 'title');
+		$this->Controller->set(compact('content'));
+		$this->Controller->set('_serialize', array('content'));
+
+		$this->Controller->Components->load('Tools.Ajax');
+		$this->assertNotEmpty($this->Controller->viewVars);
+		$this->assertNotEmpty($this->Controller->viewVars['_serialize']);
+		$this->assertEquals('content', $this->Controller->viewVars['_serialize'][0]);
+	}
+
+	/**
+	 * AjaxComponentTest::testSetVarsWithRedirect()
+	 *
+	 * @return void
+	 */
+	public function testSetVarsWithRedirect() {
+		$_SERVER['HTTP_X_REQUESTED_WITH'] = 'XMLHttpRequest';
+		$this->Controller->startupProcess();
+
+		$content = array('id' => 1, 'title' => 'title');
+		$this->Controller->set(compact('content'));
+		$this->Controller->set('_serialize', array('content'));
+
+		$this->Controller->redirect('/');
+		$this->assertSame(array(), $this->Controller->response->header());
+
+		$expected = array(
+			'url' => Router::url('/', true),
+			'status' => null,
+			'exit' => true
+		);
+		$this->assertEquals($expected, $this->Controller->viewVars['_redirect']);
+
+		$this->assertNotEmpty($this->Controller->viewVars);
+		$this->assertNotEmpty($this->Controller->viewVars['_serialize']);
+		$this->assertTrue(in_array('content', $this->Controller->viewVars['_serialize']));
+	}
 }
 
 // Use Controller instead of AppController to avoid conflicts