xp-forge / handlebars
XP Framework 的 Handlebars
v9.4.0
2024-03-24 14:28 UTC
Requires
- php: >=7.0.0
- xp-forge/mustache: ^8.2
- xp-framework/core: ^12.0 | ^11.0 | ^10.0
- xp-framework/logging: ^11.0 | ^10.0 | ^9.1
Requires (Dev)
- xp-framework/test: ^2.0 | ^1.0
- dev-master
- v9.4.0
- v9.3.0
- v9.2.0
- v9.1.0
- v9.0.0
- v8.1.1
- v8.1.0
- v8.0.0
- v7.1.1
- v7.1.0
- v7.0.1
- v7.0.0
- v6.2.0
- v6.1.1
- v6.1.0
- v6.0.1
- v6.0.0
- v5.3.0
- v5.2.1
- v5.2.0
- v5.1.1
- v5.1.0
- v5.0.0
- v4.3.4
- v4.3.3
- v4.3.2
- v4.3.1
- v4.3.0
- v4.2.3
- v4.2.2
- v4.2.1
- v4.2.0
- v4.1.0
- v4.0.2
- v4.0.1
- v4.0.0
- v3.0.2
- v3.0.1
- v3.0.0
- v2.0.0
- v1.0.2
- v1.0.1
- v1.0.0
- v0.5.0
- v0.4.1
- v0.4.0
- v0.3.0
- v0.2.0
- v0.1.0
- dev-feature/raise-errors-when-redeclaring
- dev-feature/streaming
- dev-refactor/composition-insteadof-inheritance
This package is auto-updated.
Last update: 2024-08-24 15:22:13 UTC
README
为 XP Framework 实现的 Handlebars 模板语言。
use com\handlebarsjs\HandlebarsEngine; $engine= new HandlebarsEngine(); $transformed= $engine->render('Hello {{name}}', [ 'name' => 'World' ]);
模板化
模板可以从文件系统加载。以下代码加载并转换了模板 src/main/handlebars.handlebars
use com\handlebarsjs\{HandlebarsEngine, FilesIn}; $engine= (new HandlebarsEngine())->withTemplates(new FilesIn('src/main/handlebars')); $transformed= $engine->transform('hello', [ 'name' => 'World' ]);
支持的助手函数
以下助手函数是内置的
"if" 块
{{#if licence}} A licence is available {{/if}} {{#if licence}} A licence is available {{else}} <em>Warning: No licence is available!</em> {{/if}} {{#if content}} Content {{else if hub}} Hub {{else}} Default {{/if}}
"unless" 块
{{#unless licence}} <em>Warning: No licence is available!</em> {{/unless}}
"with" 块
{{#with person}} Full name: {{firstName}} {{lastName}} {{/with}}
"each" 块
<ul> {{#each students}} <li>Student's name: {{firstName}} {{lastName}}</li> {{/each}} </ul>
所有上述块助手都支持 else
语句。
"log" 助手
{{log '"Hello", Frank\'s mother said.'}} {{log 'No publishers for' category level="warn"}}
要启用日志记录,将闭包或 util.log.LogCategory
实例传递给引擎
use util\log\Logging; use util\cmd\Console; // Use a logger category: $logger= Logging::named('trace')->toConsole(); // Or a closure: $logger= function($args, $level) { Console::writeLine('[', $level, '] ', ...$args); }; $engine= (new HandlebarsEngine())->withLogger($logger); $engine->render(...);
自定义助手函数
要添加自定义助手函数,使用 withHelpers() 并传递函数。以下代码生成 Hello WORLD
use com\handlebarsjs\HandlebarsEngine; $engine= (new HandlebarsEngine())->withHelper(function($node, $context, $options) { return strtoupper($options[0]); }); $transformed= $engine->render('Hello {{upper name}}', [ 'name' => 'World' ]);
传递的参数如下
- node: 当前节点,一个
com.github.mustache.Node
实例 - context: 当前上下文,一个
com.github.mustache.Context
实例 - options: 解析后的选项传递,在上面的例子中是字符串 "World"(这是 name 解析到的结果)