thoom/phandlebars

此软件包已被废弃,不再维护。没有建议的替代软件包。

基于 Handlebars.js 的模板引擎,适用于 Silex 框架

安装: 26

依赖关系: 0

建议者: 0

安全性: 0

星标: 3

关注者: 2

分支: 0

开放问题: 0

语言:JavaScript

dev-master 2013-02-02 05:43 UTC

This package is not auto-updated.

Last update: 2023-11-11 08:19:37 UTC


README

摘要

Phandlebars 允许您在 Silex 应用程序中使用 Handlebars 模板。而不是在 PHP 中重新实现 Handlebars 库,此提供者使用服务器端 JavaScript(主要是 node.js)来编译您创建的 Handlebars 模板(生成的 JS 文件也适用于您的客户端处理),并在服务器上处理模板。

安装

安装分为两部分:PHP 钩子连接到您的 Silex 应用程序和所需的客户端应用程序。

Silex 应用程序

目前有以下选项

  1. debug:如果 debug 为 true,则编译文件将在每次请求时被覆盖。如果为 false,则仅在编译文件不存在时构建编译文件。
  2. library:默认情况下,编译的 JS 文件将使用 Handlebars 运行时库。如果您需要使用完整的库(例如,如果您在客户端动态编译),则传递 HandlebarsServiceProvider::LIBRARY_FULL
  3. minify:如果为 true,则脚本将尝试使用 runtime.minify 命令最小化文件。
  4. path.compiled.client:这是您希望编译的客户端只读 JS 文件的完整文件路径。位置应由您的 Web 用户可写。
  5. path.compiled.server:这是您希望服务器端编译的 JS 文件存放的完整文件路径。
  6. path.templates.client:存储所有客户端只读 Handlebars 模板的目录。注意,您的所有模板都应该以 .handlebars 结尾。
  7. path.templates.server:存储所有服务器端 Handlebars 模板的目录。注意,您的所有模板都应该以 .handlebars 结尾。
  8. runtime.minify:如果未设置,则脚本将尝试使用 uglifyjs 命令最小化客户端文件。
  9. runtime.node:如果未设置,则脚本将尝试使用 node 命令运行 node。

例如

$app->register(new Thoom\Provider\HandlebarsServiceProvider(), array(
    'handlebars.options' => array(
        'debug' => $app['debug'],
        'minify' => true,
        'path.compiled.client' => $app['cache_dir'] . '/js/handlebars-compiled.js',
        'path.compiled.server' => $app['cache_dir'] . '/compiled.js',
        'path.templates.client' => __DIR__ . '/templates/client',
        'path.templates.server' => __DIR__ . '/templates/server',
    )
));

服务器

提供者需要安装一些服务器端 CLI 应用程序以渲染和编译模板。

Node.js

使用您选择的包管理器轻松安装。例如,使用 Ubuntu

$ apt-get install nodejs build-essential

这假设您的 node 可执行文件已安装并且可以通过 node 访问。如果您需要使用不同的命令,请更改 runtime.node 配置选项。

Handlebars.js

您需要使用 NPM 进行安装。

$ apt-get install npm
$ npm install -g handlebars

UglifyJS(可选)

如果您想最小化编译后的模板,则需要安装 UglifyJS。

$ npm install -g uglify-js

如果您更喜欢其他压缩器,请注意它只需要接受来自 STDIN 的数据并将其输出到 STDOUT。要更改压缩器,请更改 runtime.minify 配置选项。

使用方法

Silex 应用程序

预编译

您可能希望预编译脚本。这可以通过在您的应用程序中使用以下命令调用渲染器来完成

$app['handlebars']->server();

预编译客户端脚本中的 handlebars

$app['handlebars']->client();

服务器端渲染

渲染 "index.handlebars" 的服务器端模板

$app->get('/', function (Application $app) {
    return $app['handlebars']->render('index');
})->bind('homepage');

将全局变量(如用户数组)添加到模板中

$app['handlebars']->addGlobal('user', $userArray);

在渲染时传递数据到模板,传递一个数组作为第二个参数

$app['handlebars']->render('index', array('foo' => 'fez'));

要返回除 200 之外的 Http 头,请传递第三个参数

$app['handlebars']->render('not-found', array('foo' => 'fez'), 404);

注意: 由于 Handlebars 模板是在使用 node 的 JavaScript 中处理的,因此您只能传递可序列化为 JSON 的项目。

Handlebars 模板

除了标准的 Handlebars.js 选项 之外,您还有一些其他选项,这些选项允许您扩展模板,类似于 Twig。

要创建主模板('master.handlebars'),请使用 {{#block}} 标签

<html>
    <head>
        <title>{{#block "title"}}Master Template{{/block}}</title>
    </head>
    ...

在您的子模板中,您将使用 {{#override}} 和 {{extend}} 标签

{{#override "title"}}Child Template{{/override}}

{{extend "master"}}

这将打印

<html>
    <head>
        <title>Child Template</title>
    </head>
    ...

请注意,与 Twig 模板不同,extend 标签位于脚本的底部。这是由于 Handlebars 解析模板的方式所要求的。

附加标签

path

这个便利表达式会将您所有的 Silex 命名路由全部提取出来,并在模板中使用。

如果您的命名路由 "login" 的路径为 "/login",则您将使用

{{path "login" }}

如果您的命名路由 "section" 的路径为 "/section/{section}",则您将使用

{{path "section" section="my-section" }}