From 7f88f6ac2a4377f7b821f7e2533522c2d7da643c Mon Sep 17 00:00:00 2001 From: Pavel Puchkin Date: Tue, 26 Jul 2016 08:51:56 +0200 Subject: [PATCH] Dot notation for params replacement. Fixes #3339 --- src/Codeception/Util/Template.php | 12 +++++++++--- tests/unit/Codeception/Util/TemplateTest.php | 13 ++++++++++--- 2 files changed, 19 insertions(+), 6 deletions(-) diff --git a/src/Codeception/Util/Template.php b/src/Codeception/Util/Template.php index aa65162a83..28ffeb82b3 100644 --- a/src/Codeception/Util/Template.php +++ b/src/Codeception/Util/Template.php @@ -63,10 +63,16 @@ public function produce() foreach ($matches as $match) { // fill in placeholders $placeholder = $match[1]; - if (!isset($this->vars[$placeholder])) { - continue; + $value = $this->vars; + foreach (explode('.', $placeholder) as $segment) { + if (is_array($value) && array_key_exists($segment, $value)) { + $value = $value[$segment]; + } else { + continue 2; + } } - $result = str_replace($this->placehodlerStart . $placeholder . $this->placeholderEnd, $this->vars[$placeholder], $result); + + $result = str_replace($this->placehodlerStart . $placeholder . $this->placeholderEnd, $value, $result); } return $result; } diff --git a/tests/unit/Codeception/Util/TemplateTest.php b/tests/unit/Codeception/Util/TemplateTest.php index 51d31d09a9..7f9e9f3ff1 100644 --- a/tests/unit/Codeception/Util/TemplateTest.php +++ b/tests/unit/Codeception/Util/TemplateTest.php @@ -17,9 +17,16 @@ public function testTemplateCanHaveOtherPlaceholder() $this->assertEquals('hello, davert', $template->produce()); } + public function testTemplateSupportsDotNotationForArrays() + { + $template = new Template("hello, {{user.data.name}}"); + $template->place('user', ['data' => ['name' => 'davert']]); + $this->assertEquals('hello, davert', $template->produce()); + } + public function testShouldSkipUnmatchedPlaceholder() { - $template = new Template("hello, {{name}}"); - $this->assertEquals('hello, {{name}}', $template->produce()); + $template = new Template("hello, {{name}}"); + $this->assertEquals('hello, {{name}}', $template->produce()); } -} +} \ No newline at end of file