jasny/twig-extensions

一组有用的 Twig 过滤器

v1.3.1 2024-09-03 09:04 UTC

This package is auto-updated.

Last update: 2024-09-03 09:06:08 UTC


README

PHP Scrutinizer Code Quality Code Coverage Packagist Stable Version Packagist License

为 Twig 提供了许多有用的过滤器。

安装

可以使用 composer 容易地安装 Jasny 的 Twig 扩展。

composer require jasny/twig-extensions

使用

$twig = new Twig_Environment($loader, $options);
$twig->addExtension(new Jasny\Twig\DateExtension());
$twig->addExtension(new Jasny\Twig\PcreExtension());
$twig->addExtension(new Jasny\Twig\TextExtension());
$twig->addExtension(new Jasny\Twig\ArrayExtension());

在 Symfony 项目中使用时,请 将扩展注册为服务

services:
  twig.extension.date:
    class: Jasny\Twig\DateExtension
    tags:
      - { name: twig.extension }

  twig.extension.pcre:
    class: Jasny\Twig\PcreExtension
    tags:
      - { name: twig.extension }
  
  twig.extension.text:
    class: Jasny\Twig\TextExtension
    tags:
      - { name: twig.extension }

  twig.extension.array:
    class: Jasny\Twig\ArrayExtension
    tags:
      - { name: twig.extension }

日期扩展

根据当前区域设置格式化日期。需要 intl 扩展

  • localdate - 根据当前区域设置将日期值格式化为字符串
  • localtime - 根据当前区域设置将时间值格式化为字符串
  • localdatetime - 根据当前区域设置将日期/时间值格式化为字符串
  • age - 基于日期获取年龄(年数)
  • duration - 从秒获取持续时间字符串
Locale::setDefault(LC_ALL, "en_US"); // vs "nl_NL"
{{"now"|localdate('long')}}                 <!-- July 12, 2013 --> <!-- 12 juli 2013 -->
{{"now"|localtime('short')}}                <!-- 5:53 PM --> <!-- 17:53 -->
{{"2013-10-01 23:15:00"|localdatetime}}     <!-- 10/01/2013 11:15 PM --> <!-- 01-10-2013 23:15 -->
{{"22-08-1981"|age}}                        <!-- 35 -->
{{ 3600|duration }}                         <!-- 1h -->

PCRE

PCRE 暴露给 Twig。

  • preg_quote - 引用正则表达式字符
  • preg_match - 执行正则表达式匹配
  • preg_get - 执行正则表达式匹配并返回匹配的组
  • preg_get_all - 执行正则表达式匹配并返回所有匹配的组
  • preg_grep - 执行正则表达式匹配并返回匹配模式的条目数组
  • preg_replace - 执行正则表达式搜索并替换
  • preg_filter - 执行正则表达式搜索并替换,只返回匹配的主体。
  • preg_split - 使用正则表达式分割文本到数组
{% if client.email|preg_match('/^.+@.+\.\w+$/') %}Email: {{ client.email }}{% endif %}
Website: {{ client.website|preg_replace('~^https?://~')
First name: {{ client.fullname|preg_get('/^\S+/') }}
<ul>
  {% for item in items|preg_split('/\s+/')|preg_filter('/-test$/', 'invert') %}
    <li>{{ item }}</li>
  {% endfor %}
</ul>

文本

将文本转换为 HTML + 字符串函数

  • paragraph - 向文本添加 HTML 段落和换行符
  • line - 获取单行文本
  • less - 在页面断点处截断文本
  • truncate - 如果文本太长则截断文本
  • linkify - 将所有 URL 转换为可点击的链接(也支持 Twitter @user 和 #subject)

数组

将 PHP 的数组函数带到 Twig 中

  • sum - 计算数组中值的总和
  • product - 计算数组中值的乘积
  • values - 返回数组的所有值
  • as_array - 将对象转换为关联数组
  • html_attr - 将数组转换为 HTML 属性字符串