通过拉拉维尔的 TwigBridge 加载 Twig 扩展


Loading Twig extensions via TwigBridge in Laravel

我想通过TwigBridge使用Laravel中的Twig扩展包中的truncate过滤器,但是我一直看到此错误:

The filter "truncate" does not exist in "[template file]" at line [##].

我尝试以几种不同的方式将扩展添加到laravel/app/config/packages/rcrowe/twigbridge/config.php扩展数组中,但没有一种有效。

'Twig_Extensions_Extension_Text',

function () {
    return new Twig_Extensions_Extension_Text();
},

Composer 正确安装了该文件,我能够使用相同的自动加载器从测试文件加载它。

需要哪些配置设置才能让 TwigBridge 加载此扩展?

好吧,我觉得有点愚蠢,但让我们充分利用它。下面是一个过于明确的演练,介绍如何在 Laravel 中为 TwigBridge 启用其他 Twig 扩展。

TL;DR:扩展是在extensions.php中配置的,而不是config.php

作曲家

从这里开始。要么使用作曲家的要求 CLI 命令; composer require twig/extensions或将以下行添加到 composer.json 文件中。

"twig/extensions": "1.2.*@dev",

如果修改 composer.json,请确保运行composer update以便安装包。

配置树枝桥

要将 Twig 扩展添加到 TwigBridge,必须将它们添加到 laravel/app/config/packages/rcrowe/twigbridge/extensions.php 中的 enabled 数组中。不config.php.即使config.php中可能存在扩展数组,并且它是配置其他所有内容的位置,但这不是启用扩展的位置。这在TwigBridge的文档中有详细说明,但很容易被忽视。我设法错过了几次。

'enabled' => [
    'TwigBridge'Extension'Loader'Facades',
    'TwigBridge'Extension'Loader'Filters',
    // ...
    'Twig_Extensions_Extension_Text',   // <- add this
],

TwigBridge 的文档引用了一个config.php文件,但配置文件似乎在一段时间前已被重命名为 twig.php。生成具有artisan config:publish rcrowe/twigbridge的新配置会产生twig.phpextensions.php文件 - 没有config.php。我已经使用 TwigBridge 一段时间了,所以我仍然有一个躺着,可能会增加我的困惑。

扩展名称

每个扩展名的名称都可以在扩展文件中找到 - 它们只是Train_Case类名。截至 2015 年 1 月,Twig 扩展项目包含五个扩展,此处列出了它们包含的过滤器:

  • 阵列 - Twig_Extensions_Extension_Array
    过滤器:shuffle
  • 日期 - Twig_Extensions_Extension_Date
    过滤器:time_diff
  • I18n - Twig_Extensions_Extension_I18n
    过滤器:trans
  • 国际 - Twig_Extensions_Extension_Intl
    过滤器: localizeddatelocalizednumberlocalizedcurrency
  • 文本 - Twig_Extensions_Extension_Text
    过滤器: truncatewordwrap