phly/phly-mustache

支持继承的PHP Mustache实现

2.0.1 2016-07-02 22:16 UTC

This package is auto-updated.

Last update: 2024-09-11 14:16:05 UTC


README

Build Status

phly-mustache是为PHP编写的Mustache实现。它符合mustache的原则,并允许通过语法定义扩展格式。

特别是,它支持模板继承,类似于hogan.js,使用{{<parent}}语法。

有关完整文档,请访问ReadTheDocs

邮件列表在https://groups.google.com/d/forum/phly_mustache

安装

通过composer安装

$ composer require phly/phly-mustache

文档

文档构建可用在

您也可以通过以下两种方式之一构建文档

  • MkDocs:从仓库根目录执行mkdocs build
  • Bookdown:从仓库根目录执行bookdown doc/bookdown.json

在每种情况下,您都可以使用PHP内置的Web服务器提供文档

$ php -S 0.0.0.0:8080 -t doc/html/

然后浏览到http://localhost:8080/

用法

基本用法是

use Phly\Mustache\Mustache;

require 'vendor/autoload.php';

$mustache = new Mustache();
echo $mustache->render('some-template', $view);

默认情况下,phly-mustache将在当前目录下查找以'.mustache'结尾的模板;您可以使用默认解析器创建一系列目录

use Phly\Mustache\Resolver\DefaultResolver;

$resolver = new DefaultResolver();
$resolver->addTemplatePath($path1);
$resolver->addTemplatePath($path2);

$resolver = $mustache->getResolver()->attach($defaultResolver);

在上面的例子中,它将首先在$path2中搜索,然后是$path1以解析模板。

默认解析器默认由聚合解析器组成;因此,您也可以从聚合中按类型获取它,而不是手动添加

use Phly\Mustache\Resolver\DefaultResolver;

$resolver = $mustache->getResolver()->fetchByType(DefaultResolver::class);

模板名称可以是命名空间化的,使用语法namespace::template

$resolver->addTemplatePath($path1, 'blog');
$resolver->addTemplatePath($path2, 'contact');

根据上述配置,渲染模板contact::index将解析为$path2。如果找不到,它将回退到默认命名空间(未命名空间注册的任何路径)。

您也可以更改它将用于解析模板的后缀

$resolver->setSuffix('html'); // use '.html' as the suffix

如果您的模板使用语法定义,您必须首先将语法定义处理器添加到Mustache语法定义集合中。可以通过以下方式完成此操作

use Phly\Mustache\Pragma\ImplicitIterator as ImplicitIteratorPragma;

$mustache->getPragmas()->add(new ImplicitIteratorPragma());
$mustache->render('template-with-pragma', $view);

视图可以是关联数组或对象。对于对象,您可以引用模板中的任何公共成员,无论是属性还是方法。以下是一个示例

class View
{
    public $first_name = 'Matthew';

    public $last_name  = "Weier O'Phinney";

    public function full_name()
    {
        return $this->first_name . ' ' . $this->last_name;
    }
}

任何属性(或数组键)也可以引用有效的回调;在这种情况下,将使用回调的返回值。

$view = new stdClass;
$view->first_name = 'Matthew';
$view->last_name  = "Weier O'Phinney";
$view->full_name  = function() use ($view) {
    return $view->first_name . ' ' . $view->last_name;
};

有关完整用法详情,请参阅文档(在线 / 本地)。

架构

Phly\Mustache由五个主要类组成

  • Lexer:对mustache语法进行标记。
  • Renderer:使用视图提供的替换项渲染标记列表。
  • Pragma\PragmaInterface:语法的接口,可以修改如何处理标记。
  • Resolver\ResolverInterface:将模板名称解析为mustache语法或标记。
  • 模板引擎:外观/网关类。用于对模板进行分词和渲染,缓存标记,提供部分别名,聚合指令,并作为面向终端用户的接口。