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

Commit 286e68d

Browse files
committed
Merge pull request #23 from pine3ree/patch-1
optionally disable layout rendering
2 parents ffd2184 + f049651 commit 286e68d

File tree

2 files changed

+53
-4
lines changed

2 files changed

+53
-4
lines changed

src/ZendViewRenderer.php

Lines changed: 7 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -125,7 +125,10 @@ public function render($name, $params = [])
125125
? $this->mergeViewModel($name, $params)
126126
: $this->createModel($name, $params);
127127

128-
$viewModel = $this->prepareLayout($viewModel);
128+
$useLayout = false !== $viewModel->getVariable('layout', null);
129+
if ($useLayout) {
130+
$viewModel = $this->prepareLayout($viewModel);
131+
}
129132

130133
return $this->renderModel($viewModel, $this->renderer);
131134
}
@@ -317,16 +320,16 @@ private function mergeViewModel($name, ModelInterface $model)
317320
*/
318321
private function prepareLayout(ModelInterface $viewModel)
319322
{
320-
$layout = $this->layout ? clone $this->layout : null;
321-
322-
$providedLayout = $viewModel->getVariable('layout', false);
323+
$providedLayout = $viewModel->getVariable('layout', null);
323324
if (is_string($providedLayout) && ! empty($providedLayout)) {
324325
$layout = new ViewModel();
325326
$layout->setTemplate($providedLayout);
326327
$viewModel->setVariable('layout', null);
327328
} elseif ($providedLayout instanceof ModelInterface) {
328329
$layout = $providedLayout;
329330
$viewModel->setVariable('layout', null);
331+
} else {
332+
$layout = $this->layout ? clone $this->layout : null;
330333
}
331334

332335
if ($layout) {

test/ZendViewRendererTest.php

Lines changed: 46 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@
1111
use PHPUnit_Framework_TestCase as TestCase;
1212
use Zend\Expressive\Template\Exception\InvalidArgumentException;
1313
use Zend\Expressive\Template\TemplatePath;
14+
use Zend\Expressive\Template\TemplateRendererInterface;
1415
use Zend\Expressive\ZendView\ZendViewRenderer;
1516
use Zend\View\Model\ViewModel;
1617
use Zend\View\Renderer\PhpRenderer;
@@ -272,6 +273,51 @@ public function testCanPassViewModelForLayoutParameterWhenRendering()
272273
$this->assertContains('<title>ALTERNATE LAYOUT PAGE</title>', $result);
273274
}
274275

276+
/**
277+
* @group layout
278+
*/
279+
public function testDisableLayoutOnRender()
280+
{
281+
$layout = new ViewModel();
282+
$layout->setTemplate('zendview-layout');
283+
284+
$renderer = new ZendViewRenderer(null, $layout);
285+
$renderer->addPath(__DIR__ . '/TestAsset');
286+
287+
$name = 'zendview';
288+
$rendered = $renderer->render('zendview', [
289+
'layout' => false,
290+
'name' => $name,
291+
]);
292+
293+
$expected = file_get_contents(__DIR__ . '/TestAsset/zendview.phtml');
294+
$expected = str_replace('<?php echo $name ?>', $name, $expected);
295+
296+
$this->assertEquals($rendered, $expected);
297+
}
298+
299+
/**
300+
* @group layout
301+
*/
302+
public function testDisableLayoutViaDefaultParameter()
303+
{
304+
$layout = new ViewModel();
305+
$layout->setTemplate('zendview-layout');
306+
307+
$renderer = new ZendViewRenderer(null, $layout);
308+
$renderer->addPath(__DIR__ . '/TestAsset');
309+
$renderer->addDefaultParam(TemplateRendererInterface::TEMPLATE_ALL, 'layout', false);
310+
311+
312+
$name = 'zendview';
313+
$rendered = $renderer->render('zendview', [ 'name' => $name ]);
314+
315+
$expected = file_get_contents(__DIR__ . '/TestAsset/zendview.phtml');
316+
$expected = str_replace('<?php echo $name ?>', $name, $expected);
317+
318+
$this->assertEquals($rendered, $expected);
319+
}
320+
275321
/**
276322
* @group namespacing
277323
*/

0 commit comments

Comments
 (0)