gpt4 book ai didi

php - 使用 Silex 的 Twig addFilter?

转载 作者:可可西里 更新时间:2023-11-01 12:43:54 27 4
gpt4 key购买 nike

在使用 Silex 时将自定义过滤器连接到 Twig 的正确方法是什么,但保持现有 twig.options 不变?

这就是我的意思。我有以下代码:

$app->register(new Silex\Provider\TwigServiceProvider(), array(
'twig.path' => dirname(__FILE__).'/view',
'twig.class_path' => dirname(__FILE__).'/vendor/twig/lib',
'twig.options' => array('cache'=>'folder/twig')
));

function test() {
return 'yay';
}

$app['twig']->addFilter('test',new \Twig_Filter_Function('test'));

如果我按原样运行该代码,过滤器将不起作用。

相反,Twig 返回一个无限缓存版本的 PREVIOUS REQUEST(即使我清除缓存内容 - 我猜这是因为缓存被存储在别处,因为我正在覆盖 twig.options...不确定)。

但是,如果我放弃以下行:

'twig.options' => array('cache'=>'folder/twig')

...然后一切正常。

我怎样才能让这两个玩得很好?即保留缓存并添加自定义过滤器?

谢谢!

最佳答案

您应该创建一个 Twig 扩展并在那里添加您的过滤器。

#src/Insolis/Twig/InsolisExtension.php (snippet)
<?php

namespace Insolis\Twig;

class InsolisExtension extends \Twig_Extension
{
public function getName() {
return "insolis";
}

public function getFilters() {
return array(
"test" => new \Twig_Filter_Method($this, "test"),
);
}

public function test($input) {
return "yay";
}
}

如何注册:

#app/bootstrap.php
$app["twig"] = $app->share($app->extend("twig", function (\Twig_Environment $twig, Silex\Application $app) {
$twig->addExtension(new Insolis\Twig\InsolisExtension($app));

return $twig;
}));

关于php - 使用 Silex 的 Twig addFilter?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9504309/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com