diff --git a/lib/Cake/Test/Case/View/JsonViewTest.php b/lib/Cake/Test/Case/View/JsonViewTest.php index 5ee975657c8..01547024a61 100644 --- a/lib/Cake/Test/Case/View/JsonViewTest.php +++ b/lib/Cake/Test/Case/View/JsonViewTest.php @@ -67,6 +67,25 @@ public function testRenderWithoutViewMultiple() { $this->assertSame('application/json', $Response->type()); } +/** + * Test render with an array in _serialize and alias + * + * @return void + */ + public function testRenderWithoutViewMultipleAndAlias() { + $Request = new CakeRequest(); + $Response = new CakeResponse(); + $Controller = new Controller($Request, $Response); + $data = array('original_name' => 'my epic name', 'user' => 'fake', 'list' => array('item1', 'item2')); + $Controller->set($data); + $Controller->set('_serialize', array('new_name' => 'original_name', 'user')); + $View = new JsonView($Controller); + $output = $View->render(false); + + $this->assertSame(json_encode(array('new_name' => $data['original_name'], 'user' => $data['user'])), $output); + $this->assertSame('application/json', $Response->type()); + } + /** * testJsonpResponse method * diff --git a/lib/Cake/Test/Case/View/XmlViewTest.php b/lib/Cake/Test/Case/View/XmlViewTest.php index bf6bf3dcb04..8d150e73710 100644 --- a/lib/Cake/Test/Case/View/XmlViewTest.php +++ b/lib/Cake/Test/Case/View/XmlViewTest.php @@ -103,6 +103,35 @@ public function testRenderWithoutViewMultiple() { $this->assertSame(Xml::build($expected)->asXML(), $output); } +/** + * Test render with an array in _serialize and alias + * + * @return void + */ + public function testRenderWithoutViewMultipleAndAlias() { + $Request = new CakeRequest(); + $Response = new CakeResponse(); + $Controller = new Controller($Request, $Response); + $data = array('original_name' => 'my epic name', 'user' => 'fake', 'list' => array('item1', 'item2')); + $Controller->set($data); + $Controller->set('_serialize', array('new_name' => 'original_name', 'user')); + $View = new XmlView($Controller); + $this->assertSame('application/xml', $Response->type()); + $output = $View->render(false); + $expected = array( + 'response' => array('new_name' => $data['original_name'], 'user' => $data['user']) + ); + $this->assertSame(Xml::build($expected)->asXML(), $output); + + $Controller->set('_rootNode', 'custom_name'); + $View = new XmlView($Controller); + $output = $View->render(false); + $expected = array( + 'custom_name' => array('new_name' => $data['original_name'], 'user' => $data['user']) + ); + $this->assertSame(Xml::build($expected)->asXML(), $output); + } + /** * testRenderWithView method * diff --git a/lib/Cake/View/JsonView.php b/lib/Cake/View/JsonView.php index cc73e3629f6..3cb81ca97d1 100644 --- a/lib/Cake/View/JsonView.php +++ b/lib/Cake/View/JsonView.php @@ -119,8 +119,11 @@ public function render($view = null, $layout = null) { protected function _serialize($serialize) { if (is_array($serialize)) { $data = array(); - foreach ($serialize as $key) { - $data[$key] = $this->viewVars[$key]; + foreach ($serialize as $alias => $key) { + if (is_numeric($alias)) { + $alias = $key; + } + $data[$alias] = $this->viewVars[$key]; } } else { $data = isset($this->viewVars[$serialize]) ? $this->viewVars[$serialize] : null; diff --git a/lib/Cake/View/XmlView.php b/lib/Cake/View/XmlView.php index e77698eec1a..f95fbc675b3 100644 --- a/lib/Cake/View/XmlView.php +++ b/lib/Cake/View/XmlView.php @@ -104,8 +104,11 @@ protected function _serialize($serialize) { if (is_array($serialize)) { $data = array($rootNode => array()); - foreach ($serialize as $key) { - $data[$rootNode][$key] = $this->viewVars[$key]; + foreach ($serialize as $alias => $key) { + if (is_numeric($alias)) { + $alias = $key; + } + $data[$rootNode][$alias] = $this->viewVars[$key]; } } else { $data = isset($this->viewVars[$serialize]) ? $this->viewVars[$serialize] : null;