TemplateResolver
Implement the
\CPSIT\Typo3Handlebars\Renderer\Template\TemplateResolver
interface to change how template and partial names are resolved to absolute file
paths — for example to support a different directory layout, an additional file
extension, or a database-driven path lookup. The default implementation is
\CPSIT\.
\CPSIT\ implements
supports and provides protected helpers for normalizing root paths and
resolving filenames with
EXT: syntax. Extending it keeps
implementations concise.
- interface TemplateResolver
-
- Fully qualified name
-
\CPSIT\
Typo3Handlebars\ Renderer\ Template\ Template Resolver
- supports ( string $fileExtension)
-
Return
trueif this resolver handles the given file extension.- param string $fileExtension
-
File extension without leading dot.
- returntype
-
bool
Example implementation
namespace Vendor\Extension\Renderer\Template;
use CPSIT\Typo3Handlebars\Exception;
use CPSIT\Typo3Handlebars\Renderer\Template\BaseTemplateResolver;
use CPSIT\Typo3Handlebars\Renderer\Template\TemplatePaths;
final readonly class MyTemplateResolver extends BaseTemplateResolver
{
public function __construct(
private TemplatePaths $templatePaths,
) {}
public function resolveTemplatePath(string $templatePath, ?string $format = null): string
{
[$templateRootPaths] = $this->resolveTemplatePaths($this->templatePaths);
foreach (array_reverse($templateRootPaths) as $rootPath) {
$filename = $this->resolveFilename($templatePath, $rootPath, $format ?? 'hbs');
if (is_file($filename)) {
return $filename;
}
}
throw new Exception\TemplatePathIsNotResolvable($templatePath);
}
public function resolvePartialPath(string $partialPath, ?string $format = null): string
{
[, $partialRootPaths] = $this->resolveTemplatePaths($this->templatePaths);
foreach (array_reverse($partialRootPaths) as $rootPath) {
$filename = $this->resolveFilename($partialPath, $rootPath, $format ?? 'hbs');
if (is_file($filename)) {
return $filename;
}
}
throw new Exception\PartialPathIsNotResolvable($partialPath);
}
}
Wiring the implementation
Register the custom resolver as the implementation of the
Template interface in your extension's Services.:
services:
CPSIT\Typo3Handlebars\Renderer\Template\TemplateResolver:
alias: Vendor\Extension\Renderer\Template\MyTemplateResolver