2

我有一个非常专业的过滤器,我想将其用于单个页面而不使其成为全局过滤器。我试过这样做(这不是我想要的功能,这只是一个测试):

$this->get('twig')
    ->addFilter(new \Twig_SimpleFilter('chgname', function ($string) {
        return substr($string, 0, 5);
    }));

但我收到一个错误,“无法添加过滤器,因为扩展已经初始化”。

我知道我可以在 AppBundle/Twig 目录中创建一个类并将其添加为服务,但是 1)这非常重,而且 PITA 仅用于我需要的一个简单过滤器,并且 2)它使其对整个应用程序都是全局的,这对于我在本地需要的东西来说是愚蠢的。

有什么办法可以做到这一点,还是我只坚持全局扩展?提前致谢。

4

1 回答 1

0

Twig 在您的应用程序启动时加载一个环境,您无法动态更改它。

如果你认为 Symfony 太重,你仍然可以看看 Silex(它使用 Symfony 组件),这样你就可以编写如下内容:

$app['twig'] = $app->extend('twig', function ($twig) {
    $twig->addFilter(new \Twig_SimpleFilter('chgname', function ($string) {
        return substr($string, 0, 5);
    }));

    return $twig;
});

http://silex.sensiolabs.org

于 2016-01-29T23:04:33.583 回答