Silex - Twig_Error_Syntax:函数“path”不存在

时间:2013-09-30 11:02:43

标签: php symfony twig silex

根据Silex documentation

  

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'
));

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

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

我得到的错误如下:

  

Twig_Error_Syntax:函数“path”不存在

为什么我收到此错误?

  • 我尝试切换版本以检查它是否是版本问题
  • 一个google群组评论建议“注册”twig bridge提供商,但这不存在
  • 想要在我的所有模板中使用app.url_generator.generate而不是

我找到的临时解决方案:

确保UrlGeneratorServiceProvider()已注册:

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

path()创建一个新的twig函数:

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

我不应该这样做!! 如何才能正常

3 个答案:

答案 0 :(得分:14)

希望这对未来的观众有所帮助,因为很多人都没有回答这个问题,所以这里有一个。

确实需要UrlGeneratorServiceProvider()注册

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

,正如umpirsky在评论中提到的那样,您需要通过作曲家安装symfony/twig-bridge

您无需添加自己的功能。在加载twig模板之前,您需要注册TwigServiceProvider() UrlGeneratorServiceProvider()。从文档中可以很容易地看出这一点。

答案 1 :(得分:0)

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

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

答案 2 :(得分:0)

四个简单步骤。

  1. 创建加载程序
  2. 创建树枝对象。
  3. 创建自定义函数
  4. 添加到Twig对象。

    use Twig\Environment;
    use Twig\TwigFunction;
    use Twig\Loader\FilesystemLoader;

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

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