dhii/delimited-token-template

一个灵活的handlebars样式模板实现

v0.2.0-alpha2 2021-02-22 10:44 UTC

This package is auto-updated.

Last update: 2024-09-22 18:25:54 UTC


README

一个灵活的handlebars样式模板实现。

Continuous Integration Latest Stable Version Latest Unstable Version

详细信息

如果您需要将简单的占位符替换为值,这个模板实现很有用。例如电子邮件,其中包含类似“Hello, %username%”的文本,或者包含变量段的路径,如“/users/:username/profile”。

该模板支持任何字符串分隔符:“[*placeholder*]”,“~placeholder”和“{{placeholder}}”都将正常工作。左分隔符可以与右分隔符不同,分隔符可以包含多个字符,甚至可以省略其中一个分隔符。

当使用两个分隔符时,可以通过可配置的转义字符来转义它们,以便在渲染结果中使用它们。如果左分隔符和右分隔符分别为"{{"和"}}",转义字符为"",则字符串"{{ {{username}}"如果与上下文['username' => 'johnny']一起渲染,将生成"{{ johnny"。

使用一个分隔符也是可能的,例如“Hello, :username!”如果与上下文['username' => 'johnny']一起渲染,将生成“Hello, johnny!”。然而,在这种情况下,与使用两个分隔符相反,占位符名称仅限于字母数字字符,以及'_'、'-'和'.'(下划线、破折号和点)。此外,无法转义分隔符。因此,占位符名称不能包含分隔符。

用法

两个分隔符

此示例使用两个相同的分隔符,以及在占位符名称中间转义的分隔符。

use Dhii\Output\DelimitedTokenTemplate\Template;

$template = new Template('Hello, %user\%name%!', '%', '%', '\\'); // Note escaped delimiter
$template->render(['user%name' => 'johnny']); // Hello, johnny! 

不同的长分隔符

此示例使用两个不同长度的不同分隔符。

use Dhii\Output\DelimitedTokenTemplate\Template;

$template = new Template('Hello, -user\-name__!', '-', '__', '\\'); // Note completely different delimiters
$template->render(['user-name' => 'johnny']); // Hello, johnny! 

使用工厂的一个分隔符

通常,您的应用程序中会有一些关于分隔符和转义字符的约定。在这些情况下,能够根据该标准实例化多个模板,而不必每次都指定它,通常很有用。工厂可以代表这种约定。此示例使用仅包含左分隔符的标记。

use Dhii\Output\DelimitedTokenTemplate\TemplateFactory;

$factory= new TemplateFactory(':', '', ''); // Note absence of right delimiter and escape character
$profilePath = $factory->fromString('/users/:username/profile')
    ->render(['username' => 'johnny']); // '/users/johnny/profile'
$settingsPath = $factory->fromString('/users/:userId/settings')
    ->render(['userId' => '1234']); // '/users/1234/settings'