Skip to content

Commit ec27f12

Browse files
Milan Felix Šulcdg
authored andcommitted
TemplateFactory: added onCreate event [closes #195] (#196)
1 parent 8ea6d39 commit ec27f12

2 files changed

Lines changed: 38 additions & 0 deletions

File tree

src/Bridges/ApplicationLatte/TemplateFactory.php

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,9 @@ class TemplateFactory implements UI\ITemplateFactory
2121
{
2222
use Nette\SmartObject;
2323

24+
/** @var callable[] function (Template $template); Occurs when a new template is created */
25+
public $onCreate;
26+
2427
/** @var ILatteFactory */
2528
private $latteFactory;
2629

@@ -126,6 +129,8 @@ public function createTemplate(UI\Control $control = null): UI\ITemplate
126129
$template->flashes = (array) $presenter->getFlashSession()->$id;
127130
}
128131

132+
$this->onCreate($template);
133+
129134
return $template;
130135
}
131136
}
Lines changed: 33 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,33 @@
1+
<?php
2+
3+
/**
4+
* Test: TemplateFactory in Bridge properly handles TemplateFactory::onCreate
5+
*/
6+
7+
declare(strict_types=1);
8+
9+
use Nette\Bridges\ApplicationLatte\ILatteFactory;
10+
use Nette\Bridges\ApplicationLatte\Template;
11+
use Nette\Bridges\ApplicationLatte\TemplateFactory;
12+
use Nette\Http;
13+
use Tester\Assert;
14+
15+
16+
require __DIR__ . '/../bootstrap.php';
17+
18+
19+
test(function () {
20+
$engine = new Latte\Engine;
21+
$latteFactory = Mockery::mock(ILatteFactory::class);
22+
$latteFactory->shouldReceive('create')->andReturn($engine);
23+
$factory = new TemplateFactory($latteFactory, new Http\Request(new Http\UrlScript('http://nette.org')));
24+
$factory->onCreate[] = $callback = function (Template $template) {
25+
$template->add('foo', 'bar');
26+
};
27+
28+
$template = $factory->createTemplate();
29+
30+
Assert::type('array', $factory->onCreate);
31+
Assert::same($callback, $factory->onCreate[0]); // our callback
32+
Assert::equal('bar', $template->foo);
33+
});

0 commit comments

Comments
 (0)