byjg/jinja-php

PHP版本的Jinja模板引擎

4.9.1 2024-07-18 10:49 UTC

This package is auto-updated.

Last update: 2024-09-16 22:13:27 UTC


README

Build Status Opensource ByJG GitHub source GitHub license GitHub release

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: 使用 andor 代替 &&||

{{ 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

依赖项

开源 ByJG