树枝添加过滤器

Twig Add Filter

我有一个在我的 twig 模板中添加 ucfirst 过滤器的用例,我使用它可以正常工作:

$this->getServiceLocator()
     ->get('Twig_Environment')
     ->addFilter(
         new \Twig_SimpleFilter(
             'ucfirst',
             'ucfirst'
         )
     );

不过我很好奇是否可以通过 module.config.php?

添加此过滤器

也许是这样的:

'zfctwig'         => [
    'environment_options' => [
        'cache' => 'data/cache/twig',
        'debug' => true
    ],
    'extensions'          => [
        'Twig_Extension_Debug'
    ],
    'Twig_Environment' => [
        'filters' => [
            'ucfirst' => 'ucfirst'
        ]
    ]
]

我知道这个片段是错误的,但如果可能的话,配置会是什么样子?

我目前正在使用带 ZfcTwig 模块的 ZF2。

不,仅通过 ZfcTwig 模块中的配置无法注册新过滤器。

但建议创建项目扩展 (twig doc) 并将所有项目特定过滤器(标签、测试等)放在那里。

此项目扩展的示例:

<?php

namespace Application\Twig;

use Twig_Extension;
use Twig_SimpleFilter;

class ApplicationExtension extends Twig_Extension
{
    public function getFilters()
    {
        return [
            new Twig_SimpleFilter('ucfirst', 'ucfirst'),
        ];
    }

    public function getTests()
    {
        return [
            // ...
        ];
    }

    public function getFunctions()
    {
        return [
            // ...
        ];
    }
}

然后您只需将此扩展注册到 ZfcTwig 配置即可:

'zfctwig' => [
    'extensions' => [
        \Application\Twig\ApplicationExtension::class,
    ],
]

如果需要再添加一些其他过滤器或功能,只需将其添加到此扩展并开始使用即可。

你可以按照推荐的方式在多页和非动态中完成,或者简单的方法:

$twig_env->addFilter(new \Twig\TwigFilter('ucf','ucfirst'));

无需编辑 YAML 文件,非 php 内容或使用 composer。