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


Silex - Twig_Error_Syntax: The function "path" does not exist

根据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()方法,如下所示:

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

我得到的错误如下:

Twig_Error_Syntax:"路径"函数不存在

为什么我会收到此错误?

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

我找到的临时解决方案:

确保UrlGeneratorServiceProvider()已注册:

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

为树枝创建一个新函数path()

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

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

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

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

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

此外,正如裁判员在评论中提到的,您需要通过作曲家安装symfony/twig-bridge

您无需添加自己的函数。在加载树枝模板之前,您需要注册TwigServiceProvider()UrlGeneratorServiceProvider()。这在文档中并不容易看出。

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

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

四个简单的步骤。

  1. 创建加载程序
  2. 创建树枝对象。
  3. 创建自定义函数
  4. 添加到树枝对象。
   使用树枝''环境;    使用树枝''树枝功能;    使用 Twig''Loader''FilesystemLoader;    $loader = new FilesystemLoader('/twig/templates'(;    $twig = 新环境($loader, [](;    $function = new TwigFunction('url', function (( { return 'MyURL'; }(;    $twig -> addFunction($function(;