studyportals / template4
Studyportals Template4 模板引擎的 Composer 包
Requires
- psr/simple-cache: ^1.0.0
Requires (Dev)
- brainmaestro/composer-git-hooks: ^2.8.0
- mockery/mockery: ^1.3.0
- phpmd/phpmd: ^2.8.0
- phpstan/extension-installer: ^1.0.0
- phpstan/phpstan: ^0.12.0
- phpstan/phpstan-mockery: ^0.12.0
- phpstan/phpstan-phpunit: ^0.12.0
- phpunit/phpunit: ^8.5.0
- slevomat/coding-standard: ^6.1.0
- squizlabs/php_codesniffer: ^3.5.0
This package is auto-updated.
Last update: 2022-01-27 17:26:04 UTC
README
A PHP Template-engine.
用法
use StudyPortals\Template\Template; $template = Template::create('Templates/Home.tp4'); $template->title = 'Hello world!'; $template->header->foo = 'bar'; foreach(['item 1', 'item 2'] as $item){ $template->listOfItems->name = $item; $template->listOfItems->repeat(); } echo $template;
任何标量值和任何实现 __toString()
的对象(包括额外的模板)都可以传递给 $template
以用作变量。
作用域、部分和嵌套
可以在模板中添加 Section
元素以创建作用域边界。
在 Section
中定义的变量(例如上面 header
部分的 foo
)仅在 Section
和其子代中可用。
重新定义现有变量(即已经由更高作用域提供的变量)会覆盖 Section
和其子代中的变量。它不会影响更高作用域中的变量。
作用域应用于 TemplateNodeTree
级别,因此从那里扩展的任何内容(例如 Section
、Repeater
和所有包含语句)都充当作用域边界。
TemplateNodeTree
元素可以无限嵌套——直到可能遇到 PHP 的“物理”递归限制(这在任何实际场景中都非常不可能发生)。
重复器
一种特殊的 Section
类型是 Repeater
。
它的行为类似于普通部分,但有一个主要区别:当你可以调用其 repeat()
方法时,Repeater
的当前状态将被渲染并存储以供稍后输出。
随后,Repeater
作用域中的所有变量都将被清除,使你可以从头开始填充它。这允许渲染各种动态重复结构(列表、菜单等)。
包含
可以使用 include
(用于静态 HTML 内容)和 include template
(用于 Template4 文件)语法从文件系统包含文件。
包含的模板的行为与您将它们的全部内容粘贴到 inclue template
语句的位置一样。
模板的动态合并
如果您将任何扩展自 TemplateNodeTree
的内容传递给模板实例,它将被合并到该实例中。这种行为与在模板文件本身中使用 include template
语句相同。
这允许高级动态(甚至递归)行为。有关此示例,请参阅 📂 tests/smoke
中的 PHP 代码。
缓存
为了提高性能,建议缓存解析的模板。这将导致存储模板的中间表示形式(使用 PHP 的序列化格式)。
要使用缓存,请在创建模板之前启用它。
Template::setTemplateCache('on');
可选地,您可以使用 setTemplateCacheStore()
函数提供一个符合 Psr 规范的 CacheInterface
。现在将不再在模板文件旁边生成 .tp4-cache
文件,而是使用提供的 CacheInterface
。
Template::setTemplateCache('on'); Template::setTemplateCacheStore($somePsrCache);
当模板文件发生变化时,缓存会自动失效。
⚠ 注意,包含的文件作为主模板的一部分进行缓存。包含文件的变化将 不会 使主模板的缓存失效...
开发
需要 PHP 7.2。
composer install # Run smoke-tests composer run phpunit # Run compliance-tests composer run phpstan composer run phpcs composer run phpmd