13

根据Silex 文档

Symfony 提供了一个 Twig 桥,它提供了一些 Symfony2 组件和 Twig 之间的额外集成。将其作为依赖项添加到您的 composer.json 文件中。

我在我的composer.json文件中包含以下内容:

{
    "require": {
        "silex/silex": "1.*",
        "twig/twig": ">=1.8,<2.0-dev",
        "symfony/twig-bridge": "2.3.*"
    }
}

TwigServiceProvider()这样注册:

$app->register(new Silex\Provider\TwigServiceProvider(), array(
    'twig.path' => __DIR__ . '/views'
));

我正在尝试path()像这样使用 twig 方法:

<a href="{{ path('logout') }}">Log out</a>

我得到的错误如下:

Twig_Error_Syntax:函数“路径”不存在

为什么我会收到此错误?

  • 我尝试切换版本以检查是否是版本问题
  • 一个谷歌群组评论建议“注册”树枝桥提供者,但这不存在
  • 不想app.url_generator.generate在我的所有模板中使用:

我发现的一个临时解决方案:

确保UrlGeneratorServiceProvider()已注册:

$app->register(new UrlGeneratorServiceProvider());

为 twig 创建一个新函数path()

$app['twig']->addFunction(new \Twig_SimpleFunction('path', function($url) use ($app) {
    return $app['url_generator']->generate($url);
}));

我不应该这样做!!我怎样才能让它正常工作

4

3 回答 3

15

希望这将有助于未来的观众,因为许多人在没有可靠答案的情况下发布了这个问题,所以这里有一个。

从字面上看,您需要UrlGeneratorServiceProvider()注册

$app->register(new UrlGeneratorServiceProvider());

此外,正如 umpirsky 在评论中提到的,您需要symfony/twig-bridge通过 composer 安装。

您不需要添加自己的功能。在加载 twig 模板之前,您需要 theTwigServiceProvider() 和register 。UrlGeneratorServiceProvider()这在文档中并不容易看出。

于 2013-09-30T11:40:30.860 回答
0

四个简单的步骤。

  1. 创建加载器
  2. 创建树枝对象。
  3. 创建您的自定义功能
  4. 添加到 Twig 对象。
    使用树枝\环境;
    使用 Twig\TwigFunction;
    使用 Twig\Loader\FilesystemLoader;

    $loader = new FilesystemLoader('/twig/templates');
    $twig = new Environment($loader, []);

    $function = new TwigFunction('url', function () { return 'MyURL'; });
    $twig -> addFunction($function);

于 2019-07-25T17:31:00.987 回答
0

我也必须为 twig for 创建一个新函数path(),但我对其进行了一些改进以处理可变数量的参数,以允许在 twig 模板中传递数组:

$app['twig']->addFunction(new \Twig_SimpleFunction('path', function(...$url) use ($app) {
   return call_user_func_array(array($app['url_generator'], 'generate'), $url);
}));
于 2017-06-02T11:26:31.490 回答