Skip to content

Commit eb07816

Browse files
committed
Control, Presenter::createTemplate() tries to create custom Template according to naming convention
1 parent 3957952 commit eb07816

File tree

3 files changed

+18
-4
lines changed

3 files changed

+18
-4
lines changed

src/Application/UI/Control.php

Lines changed: 10 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -54,7 +54,16 @@ final public function getTemplate(): ITemplate
5454
protected function createTemplate(): ITemplate
5555
{
5656
$templateFactory = $this->templateFactory ?: $this->getPresenter()->getTemplateFactory();
57-
return $templateFactory->createTemplate($this);
57+
return $templateFactory->createTemplate($this, self::formatTemplateClass());
58+
}
59+
60+
61+
public static function formatTemplateClass(): ?string
62+
{
63+
$class = preg_replace('#Presenter$|Control$#', 'Template', static::class);
64+
return is_a($class, Nette\Bridges\ApplicationLatte\LatteTemplate::class, true)
65+
? $class
66+
: null;
5867
}
5968

6069

src/Application/UI/Presenter.php

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -561,7 +561,7 @@ public static function formatRenderMethod(string $view): string
561561

562562
protected function createTemplate(): ITemplate
563563
{
564-
return $this->getTemplateFactory()->createTemplate($this);
564+
return $this->getTemplateFactory()->createTemplate($this, self::formatTemplateClass());
565565
}
566566

567567

src/Bridges/ApplicationLatte/TemplateFactory.php

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -54,10 +54,15 @@ public function __construct(ILatteFactory $latteFactory, Nette\Http\IRequest $ht
5454
}
5555

5656

57-
public function createTemplate(UI\Control $control = null): UI\ITemplate
57+
public function createTemplate(UI\Control $control = null, string $class = null): UI\ITemplate
5858
{
5959
$latte = $this->latteFactory->create();
60-
$template = new $this->templateClass($latte);
60+
$class = $class ?: $this->templateClass;
61+
$template = new $class($latte);
62+
if (!$template instanceof LatteTemplate) {
63+
throw new Nette\InvalidArgumentException("Class $class does not extend " . LatteTemplate::class . '.');
64+
}
65+
6166
$presenter = $control ? $control->getPresenterIfExists() : null;
6267

6368
if ($latte->onCompile instanceof \Traversable) {

0 commit comments

Comments
 (0)