phly / phly-mustache
支持继承的PHP Mustache实现
Requires
- php: >=5.5
- zendframework/zend-escaper: ^2.5
- zendframework/zend-stdlib: ^2.6 || ^3.0
Requires (Dev)
- phpunit/phpunit: ^4.7
- squizlabs/php_codesniffer: ^2.3.1
This package is auto-updated.
Last update: 2024-09-11 14:16:05 UTC
README
phly-mustache是为PHP编写的Mustache实现。它符合mustache的原则,并允许通过语法定义扩展格式。
特别是,它支持模板继承,类似于hogan.js,使用{{<parent}}
语法。
有关完整文档,请访问ReadTheDocs。
邮件列表在https://groups.google.com/d/forum/phly_mustache
安装
通过composer安装
$ composer require phly/phly-mustache
文档
文档构建可用在
您也可以通过以下两种方式之一构建文档
在每种情况下,您都可以使用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语法或标记。
- 模板引擎:外观/网关类。用于对模板进行分词和渲染,缓存标记,提供部分别名,聚合指令,并作为面向终端用户的接口。