From d142dcbb6918d73da2f8e773f92bc5bc0a68e266 Mon Sep 17 00:00:00 2001 From: Matt Pinkston Date: Fri, 9 Mar 2012 12:15:31 -0600 Subject: [PATCH] Update to use ArrayUtils, JSON::encode --- src/Model/JsonModel.php | 10 +++++++++- src/Renderer/JsonRenderer.php | 14 +++++++++----- 2 files changed, 18 insertions(+), 6 deletions(-) diff --git a/src/Model/JsonModel.php b/src/Model/JsonModel.php index e554080d..0f74a03e 100644 --- a/src/Model/JsonModel.php +++ b/src/Model/JsonModel.php @@ -33,6 +33,14 @@ */ class JsonModel extends ViewModel { + /** + * JSON probably won't need to be captured into a + * a parent container by default. + * + * @var string + */ + protected $captureTo = null; + /** * JSON is usually terminal * @@ -51,6 +59,6 @@ public function serialize() if ($variables instanceof Traversable) { $variables = ArrayUtils::iteratorToArray($variables); } - return json_encode($variables); + return Json::encode($variables); } } diff --git a/src/Renderer/JsonRenderer.php b/src/Renderer/JsonRenderer.php index e0e7dd36..4d9dba4c 100644 --- a/src/Renderer/JsonRenderer.php +++ b/src/Renderer/JsonRenderer.php @@ -165,7 +165,11 @@ public function canRenderTrees() */ protected function recurseModel(Model $model) { - $values = (array) $model->getVariables(); + $values = $model->getVariables(); + if ($variables instanceof Traversable) { + $variables = ArrayUtils::iteratorToArray($variables); + } + if (!$model->hasChildren()) { return $values; } @@ -179,12 +183,12 @@ protected function recurseModel(Model $model) } $childValues = $this->recurseModel($child); - if ($mergeChildren) { - // Merging values with parent - $values = array_replace_recursive($values, $childValues); - } else { + if ($captureTo) { // Capturing to a specific key $values[$captureTo] = $childValues; + } elseif ($mergeChildren) { + // Merging values with parent + $values = array_replace_recursive($values, $childValues); } } return $values;