byjg / jinja-php
PHP版本的Jinja模板引擎
4.9.1
2024-07-18 10:49 UTC
Requires
- php: >=7.4
Requires (Dev)
- phpunit/phpunit: 5.7.*|7.4.*|^9.5
This package is auto-updated.
Last update: 2024-09-16 22:13:27 UTC
README
Jinja for PHP 是 Jinja2 模板引擎在 PHP 中的实现。
简介
这个库是将 Jinja2 模板引擎移植到 PHP 中的版本。它是 Jinja2 模板引擎的部分实现。
该库的主要目标是允许在 Jinja Python 和 PHP 中处理模板,然而其 API 与 Python 原版并不相同。
实现的功能
目前实现了以下功能
字面量
大多数字面量都得到了支持。例如。
{{ 1 }}
{{ 1.2 }}
{{ "Hello World" }}
{{ true }}
{{ false }}
{{ none }}
{{ [1, 2, 3] }}
{{ ['a': 1, 'b': 2] }} // It is different from Python
@todo: 使用 Python 的表示法来表示字典。
变量
大多数变量都得到了支持。例如。
{{ myvar }}
{{ myvar.myproperty }}
{{ myvar.myproperty.1 }}
{{ myvar.myproperty.a }}
{{ myvar.myproperty.a.myproperty }}
{{ myvar.myproperty.a.myproperty.1 }}
{{ myvar.myproperty.a.myproperty.1.myproperty }}
@todo: 尚未支持括号表示法。
过滤器
实现了一些过滤器
{{ var | upper }}
{{ var | lower }}
{{ var | default }}
{{ var | default('-') }}
{{ var | replace('a', 'b') }}
{{ var | join }}
{{ var | join(',') }}
{{ var | split }}
{{ var | split(',') }}
{{ var | capitalize }}
{{ var | trim }}
{{ var | trim('-') }}
{{ var | length }}
数学运算
{{ 1 + 2 }}
{{ 1 - 2 }}
{{ 1 * 2 }}
{{ 1 / 2 }}
{{ 1 % 2 }}
{{ 1 ** 2 }}
连接
{{ "Hello" ~ "World" }}
{{ var1 ~ var2 }}
比较
{{ 1 == 2 }}
{{ 1 != 2 }}
{{ 1 < 2 }}
{{ 1 <= 2 }}
{{ 1 > 2 }}
{{ 1 >= 2 }}
逻辑运算
Python 和 PHP 实现之间存在一些差异。TODO: 使用 and 和 or 代替 && 和 ||
{{ 1 && 2 }}
{{ 1 || 2 }}
{{ ! 1 }}
如果
@todo: 尚未实现 elif
{% if var1 == var2 %} {{ var1 }} is equal to {{ var2 }} {% else %} 1 is not equal to 2 or 3 {% endif %}
{% if 1 == 2 %} 1 is equal to 2 {% else %} 1 is not equal to 2 or 3 {% endif %}
循环
@todo: 尚未实现 else
{% for item in items %} {{ item }} {% endfor %}
{% for key, value in items %} {{ key }}: {{ value }} {% endfor %}
循环控制变量
- loop.index
- loop.index0
- loop.revindex
- loop.revindex0
- loop.first
- loop.last
- loop.length
{% for item in items %} {{ loop.index }}: {{ item }} {% endfor %}
用法
use ByJG\JinjaPhp\Template; $templateString = <<<EOT Hello {{ name }} EOT; $template = new Template($templateString); $template->withUndefined(new DebugUndefined()); // Default is StrictUndefined $variables = [ 'name' => 'World' ]; echo $template->render($variables);
安装
composer require byjg/jinja-php