phpugph/handlebars

handlebars.js 的超快 PHP8 实现

1.0.6 2023-09-11 02:00 UTC

This package is auto-updated.

Last update: 2024-09-11 04:22:08 UTC


README

handlebars.js 的超快 PHP8 实现

Build Status Coverage Status Latest Stable Version Total Downloads Latest Unstable Version License

安装

$ composer install phpugph/handlebars

简介

PHP Handlebars 和 JS 接口,支持编译时辅助函数和超级棒的编译时错误报告。此版本的 Handlebars 基于缓存编译模板,从而提高了整体编译速度。未缓存时加载约 50 毫秒,缓存时约 30 毫秒。

基本用法

渲染

use Handlebars\HandlebarsHandler as Handlebars;
$handlebars = new Handlebars();
$template = $handlebars->compile('{{foo}} {{bar}}');

echo $template(['foo' => 'BAR', 'bar' => 'ZOO']);

注册辅助函数

$handlebars->registerHelper('bar', function($options) {
    return 'ZOO';
});

$template = $handlebars->compile('{{foo}} {{bar}}');

echo $template(['foo' => 'BAR']);

注册部分模板

$handlebars->registerPartial('bar', 'zoo');
$template = $handlebars->compile('{{foo}} {{> bar}}');

echo $template(['foo' => 'BAR']);

特性

  • PHP API - 设计用于与 handlebars.js 文档匹配
    • registerHelper() - 与您期望的 handlebars.js 完全匹配(除了它是 PHP 语法之外)
    • registerPartial() - 接受字符串和回调函数
    • {{./foo}}{{../bar}} 这样的字面量会被正确评估
    • 支持像 {{!-- Something --}}{{! Something }} 这样的注释
    • 支持像 {{~#each}}{{~foo~}} 这样的缩进
    • 支持 Mustache 向后兼容性 {{#foo}}{{this}}{{/foo}}
    • Tokenizer 辅助函数,用于优化自定义代码生成以进行缓存
    • 为未知辅助函数和未知部分提供事件处理器
  • 默认辅助函数与 handlebars.js 匹配
    • each - 和 {{#each foo as |value, key|}}
      • 请注意,当对象大小不同步时,each 可能会变慢
      • 我们需要帮助优化这一点
    • with
    • unless
    • if

去特性(或者说特性的反面)

  • 不支持文件模板。
    • 您需要将它们加载起来,然后传递给 Handlebars。
    • 如果这是问题,您应该考虑其他 Handlebars PHP 库
    • 您总是可以为此创建一个辅助函数
    • 将在请求后考虑此去特性(创建一个问题 :))
  • 部分故障转移
    • 我们还没有机会去做,因为我们没有这个需求
    • 将在请求后考虑此去特性(创建一个问题 :))
  • 安全字符串/转义
    • PHP 有可以将字符串转换为“安全”的函数。
    • 我们不想创建在其他上下文中已经存在的东西
    • 将在请求后考虑此去特性(创建一个问题 :))
  • 工具
    • PHP 有函数支持 handlebars.js 中列出的大多数工具
    • 我们不想创建在其他上下文中已经存在的东西
    • 将在请求后考虑此去特性(创建一个问题 :))
  • 动态部分
    • 在管道底部
    • 因为难以重新创建
    • 和实用性
    • 将在请求后考虑此去特性(创建一个问题 :( )
  • 内联部分
    • 待办事项
  • 装饰器
    • 待办事项
  • 框架
    • 待办事项

生产就绪

当您的模板准备用于生产(实时)环境时,建议使用缓存。要启用缓存

  • 创建一个缓存文件夹,并确保为 handlebars 设置正确的权限以写入文件。
  • 使用 $handlebars->setCache(__DIR__.'/your/cache/folder/location'); 启用缓存
  • 如果文件夹位置不存在,则禁用缓存。

API

compile

返回一个将数据与模板绑定的回调函数

用法

$handlebars->compile(string $string);

参数

  • string $string - 模板字符串

返回 function - 模板绑定处理器

示例

$handlebars->compile();

getCache

返回活动缓存路径

用法

$handlebars->getCache();

返回 Closure

getHelper

根据名称返回辅助函数

用法

$handlebars->getHelper('if');

参数

  • string $name - 辅助函数的名称

返回 Closure

getHelpers

返回所有已注册的辅助函数

用法

$handlebars->getHelpers();

参数

返回 array

getPartial

根据名称返回部分

用法

$handlebars->getPartial('foobar');

参数

  • 字符串 $name - 部分的名称

返回 字符串

getPartials

返回所有已注册的部分

用法

$handlebars->getPartials();

参数

返回 array

registerHelper

著名的注册助手,与Handlebars API匹配

用法

$handlebars->registerHelper(string $name, function $helper);

参数

  • string $name - 辅助函数的名称
  • 函数 $helper - 辅助处理程序

返回 Handlebrs\Index

示例

$handlebars->registerHelper();

registerPartial

延迟注册部分到引擎,因为没有添加部分的方法...

用法

$handlebars->registerPartial(string $name, string $partial);

参数

  • string $name - 辅助函数的名称
  • 字符串 $partial - 辅助处理程序

返回 Handlebrs\Index

示例

$handlebars->registerPartial();

setCache

启用缓存选项

用法

$handlebars->setCache(string $path);

参数

  • 字符串 $path - 缓存路径

返回 Handlebrs\Index

示例

$handlebars->setCache('/path/to/cache/folder');

setPrefix

设置缓存文件的名称前缀

用法

$handlebars->setPrefix(string $prefix);

参数

  • 字符串 $prefix - 自定义前缀名称

返回 Handlebrs\Index

示例

$handlebars->setPrefix('special-template-');

unregisterHelper

registerHelper的反义词

用法

$handlebars->unregisterHelper(string $name);

参数

  • 字符串 $name - 辅助名称

返回 Handlebars\Index

示例

$handlebars->unregisterHelper();

unregisterPartial

registerPartial的反义词

用法

$handlebars->unregisterPartial(string $name);

参数

  • 字符串 $name - 部分名称

返回 Handlebars\Index

示例

$handlebars->unregisterPartial();