Symfony Silex渲染控制器内部细枝错误

Symfony Silex渲染控制器内部细枝错误,symfony,twig,silex,Symfony,Twig,Silex,我正在尝试使用以下内容渲染细枝模板中的控制器: {{ render(url('contact_form')) }} 但我得到了一个错误: 在呈现模板期间引发异常(“无法添加函数“资产”,因为扩展已初始化。”) 我有一个名为asset的细枝函数,如下所示: $app['twig'] = $app->extend('twig', function ($twig, $app) { // add custom globals, filters, tags, ... $twig-

我正在尝试使用以下内容渲染细枝模板中的控制器:

{{ render(url('contact_form')) }}
但我得到了一个错误:

在呈现模板期间引发异常(“无法添加函数“资产”,因为扩展已初始化。”)

我有一个名为asset的细枝函数,如下所示:

$app['twig'] = $app->extend('twig', function ($twig, $app) {
    // add custom globals, filters, tags, ...

    $twig->addFunction(new \Twig_SimpleFunction('asset', function ($asset) use ($app) {
        return $app['request_stack']->getMasterRequest()->getBasepath().'/'.$asset;
    }));

    return $twig;
});
silex似乎再次尝试在render()中添加asset函数


我不知道如何修复此问题。

twig已经有一个名为asset的函数,您需要将您的asset custom函数调用到其他对象。正如错误所示,它已经初始化。

我不得不用try/catch块将其包装起来,以忽略错误,使其正常工作。这是一个肮脏的解决方案,但奏效了

try {
    $twig->addFunction(new \Twig_SimpleFunction('asset', function ($asset) use ($app) {
        return $app['request_stack']->getMasterRequest()->getBasepath().'/'.$asset;
    }));
} catch (Exception $e) {
    // do nothing
}

没有本机资产功能。如果我在浏览器中打开一个url,它工作得很好,但是如果我尝试在一个小树枝模板silex中呈现一个控制器,尝试再次定义资产函数,symfony.com/doc/current/reference/twig#u reference.html#asset我使用的资产函数足够安静,所以我仍然认为它存在,我不确定你现在是否过度隐藏了它,但奇怪的事情可能会发生,只需更改自定义函数的名称这是为symfony设计的,我正在使用silex。