Skip to content
This repository was archived by the owner on Jan 21, 2020. It is now read-only.

Commit 63a9a74

Browse files
committed
Allow provided layout to override default parameters in layout
Fixes an issue where a default parameter is provided via default layout but was not overriden when $providedLayout is provided.
1 parent 5837699 commit 63a9a74

File tree

2 files changed

+27
-1
lines changed

2 files changed

+27
-1
lines changed

src/ZendViewRenderer.php

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -342,7 +342,7 @@ private function prepareLayout(ModelInterface $viewModel)
342342
if ($layout) {
343343
$layout->addChild($viewModel);
344344
$viewModel = $layout;
345-
$viewModel->setVariables($this->mergeParams($layout->getTemplate(), []));
345+
$viewModel->setVariables($this->mergeParams($layout->getTemplate(), (array) $layout->getVariables()));
346346
}
347347

348348
return $viewModel;

test/ZendViewRendererTest.php

Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -268,6 +268,32 @@ public function testTemplateDefaultParameterIsAvailableInLayout()
268268
$this->assertContains($expected, $result, sprintf('Received %s', $result));
269269
}
270270

271+
public function testTemplateDefaultParameterIsAvailableInProvidedLayout()
272+
{
273+
$renderer = new ZendViewRenderer(null);
274+
$renderer->addPath(__DIR__ . '/TestAsset');
275+
$titleToBeOverriden = uniqid('ZendViewTitleToBeOverriden', true);
276+
$title = uniqid('ZendViewTitle', true);
277+
$name = uniqid('ZendViewName', true);
278+
$renderer->addDefaultParam('zendview-layout-variable', 'title', $titleToBeOverriden);
279+
280+
$layout = new ViewModel(['title' => $title]);
281+
$layout->setTemplate('zendview-layout-variable');
282+
$result = $renderer->render('zendview', ['name' => $name, 'layout' => $layout]);
283+
$this->assertContains($title, $result);
284+
$this->assertContains($name, $result);
285+
286+
$content = file_get_contents(__DIR__ . '/TestAsset/zendview.phtml');
287+
$content = str_replace('<?php echo $name ?>', $name, $content);
288+
$layout = file_get_contents(__DIR__ . '/TestAsset/zendview-layout-variable.phtml');
289+
$layout = str_replace('<?= $this->title ?>', $title, $layout);
290+
$layout = str_replace('<?= $this->content ?>' . PHP_EOL, $content, $layout);
291+
$this->assertContains($layout, $result);
292+
293+
$expected = sprintf('<title>Layout Page: %s</title>', $title);
294+
$this->assertContains($expected, $result, sprintf('Received %s', $result));
295+
}
296+
271297
/**
272298
* @group layout
273299
*/

0 commit comments

Comments
 (0)