Twig 错误中的 Silex 渲染控制器

Silex render controller inside twig error

我正在尝试使用以下方法在树枝模板中渲染控制器:

{{ render(url('contact_form')) }}

但是我收到了这个错误:

An exception has been thrown during the rendering of a template ("Unable to add function "asset" as extensions have already been initialized.")

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

$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 函数,您需要将您的资产自定义函数调用到其他东西,正如错误所说,它已经被初始化。

我不得不用 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
}