簡體   English   中英

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

我正在嘗試使用twig path()方法,如下所示:

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

我得到的錯誤如下:

Twig_Error_Syntax:函數“path”不存在

為什么我收到此錯誤?

  • 我試過切換版本來檢查它是否是版本問題
  • 一個谷歌團體評論建議'注冊'樹枝橋提供商,但這不存在
  • 不想在我的所有模板中使用: 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);
}));

我不應該這樣做!! 我怎樣才能正常工作

希望這將有助於未來的觀眾,因為許多人已經發布了這個問題而沒有一個可靠的答案,所以這里有一個。

從字面上看,您需要注冊UrlGeneratorServiceProvider()

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

另外 ,正如umpirsky在評論中提到的那樣,你需要通過composer安裝symfony/twig-bridge twig symfony/twig-bridge

您無需添加自己的功能。 在加載UrlGeneratorServiceProvider()模板之前,您需要注冊TwigServiceProvider() UrlGeneratorServiceProvider() 從文檔中不容易看出這一點。

我也必須為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);
}));

四個簡單的步驟。

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM