相关疑难解决方法(0)

使用Silex的Twig addFilter?

在使用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'));
Run Code Online (Sandbox Code Playgroud)

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

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

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

'twig.options' => array('cache'=>'folder/twig')
Run Code Online (Sandbox Code Playgroud)

......然后一切正常.

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

谢谢!

php caching symfony twig silex

7
推荐指数
1
解决办法
4450
查看次数

Twig在包含之前检查部分存在

我正在开发一个相当复杂的多语言网站,它将根据html语言环境呈现不同的部分内容.

我有一个部分结构,将使用附加到文件名的区域设置来选择正确的.例如;

{% include '@BundleName/Layout/Text/_partial-name.' ~ htmlLocale ~ '.html.twig' with {'title' : resource.title } %}
Run Code Online (Sandbox Code Playgroud)

虽然这有效,但如果所选的区域设置尚未(部分)创建其部分,则存在风险,这将引发错误.我想要做的是在尝试渲染之前检查partial的存在,如果它还不存在则回退到默认值.

{% if '@BundleName/Layout/Text/_partial-name.' ~ htmlLocale ~ '.html.twig' %} 
    {% include '@BundleName/Layout/Text/_partial-name.' ~ htmlLocale ~ '.html.twig' with {'title' : resource.title } %}
{% else %}
    {% include '@BundleName/Layout/Text/_partial-name.html.twig' with {'title' : resource.title } %} 
{% endif %}
Run Code Online (Sandbox Code Playgroud)

显然这不起作用,但这就是我追求的那种东西!

symfony twig

2
推荐指数
1
解决办法
1401
查看次数

标签 统计

symfony ×2

twig ×2

caching ×1

php ×1

silex ×1