Skip to content
Permalink
Browse files

It is now possible to set the template a cell uses using the ViewBuilder

  • Loading branch information...
HavokInspiration committed Feb 4, 2016
1 parent 225e8dd commit 77df8b46e3f41865549fffae02cfdabb81521cc6
Showing with 60 additions and 9 deletions.
  1. +1 −1 src/View/Cell.php
  2. +45 −1 tests/TestCase/View/CellTest.php
  3. +14 −7 tests/test_app/TestApp/View/Cell/ArticlesCell.php
@@ -194,7 +194,7 @@ public function render($template = null)
$template = Inflector::underscore($template);
}
if ($template === null) {
$template = $this->template;
$template = $this->viewBuilder()->template() ?: $this->template;
}
$builder = $this->viewBuilder();
@@ -133,7 +133,7 @@ public function testDefaultCellAction()
}
/**
* Tests that cell action setting the template renders the correct template
* Tests that cell action setting the template using the property renders the correct template
*
* @return void
*/
@@ -143,11 +143,31 @@ public function testSettingCellTemplateFromAction()
$this->assertContains('This is the alternate template', "{$appCell}");
$this->assertEquals('alternate_teaser_list', $appCell->template);
$this->assertEquals('alternate_teaser_list', $appCell->viewBuilder()->template());
$appCell = $this->View->cell('Articles::customTemplate');
$this->assertContains('This is the alternate template', $appCell->render());
$this->assertEquals('alternate_teaser_list', $appCell->template);
$this->assertEquals('alternate_teaser_list', $appCell->viewBuilder()->template());
}
/**
* Tests that cell action setting the template using the ViewBuilder renders the correct template
*
* @return void
*/
public function testSettingCellTemplateFromActionViewBuilder()
{
$appCell = $this->View->cell('Articles::customTemplateViewBuilder');
$this->assertContains('This is the alternate template', "{$appCell}");
$this->assertEquals('alternate_teaser_list', $appCell->viewBuilder()->template());
$appCell = $this->View->cell('Articles::customTemplateViewBuilder');
$this->assertContains('This is the alternate template', $appCell->render());
$this->assertEquals('alternate_teaser_list', $appCell->viewBuilder()->template());
}
/**
@@ -403,4 +423,28 @@ public function testCachedRenderSimpleCustomTemplate()
Cache::drop('default');
}
/**
* Test cached render.
*
* @return void
*/
public function testCachedRenderSimpleCustomTemplateViewBuilder()
{
$mock = $this->getMock('Cake\Cache\CacheEngine');
$mock->method('init')
->will($this->returnValue(true));
$mock->method('read')
->will($this->returnValue(false));
$mock->expects($this->once())
->method('write')
->with('cell_test_app_view_cell_articles_cell_customTemplateViewBuilder', "<h1>This is the alternate template</h1>\n");
Cache::config('default', $mock);
$cell = $this->View->cell('Articles::customTemplateViewBuilder', [], ['cache' => true]);
$result = $cell->render();
$this->assertContains('This is the alternate template', $result);
Cache::drop('default');
}
}
@@ -52,19 +52,26 @@ public function teaserList()
}
/**
* Renders articles in teaser view mode.
* Renders a view using a different template than the action name
* The template is set using the ``Cell::$template`` property
*
* @return void
*/
public function customTemplate()
{
$this->template = 'alternate_teaser_list';
$this->set('articles', [
['title' => 'Lorem ipsum', 'body' => 'dolorem sit amet'],
['title' => 'Usectetur adipiscing eli', 'body' => 'tortor, in tincidunt sem dictum vel'],
['title' => 'Topis semper blandit eu non', 'body' => 'alvinar diam convallis non. Nullam pu'],
['title' => 'Suspendisse gravida neque', 'body' => 'pellentesque sed scelerisque libero'],
]);
}
/**
* Renders a view using a different template than the action name
* The template is set using the ViewBuilder bound to the Cell
*
* @return void
*/
public function customTemplateViewBuilder()
{
$this->template = 'derp';
$this->viewBuilder()->template('alternate_teaser_list');
}
/**

0 comments on commit 77df8b4

Please sign in to comment.
You can’t perform that action at this time.