[英]Twig_Error_Syntax: The function “code” does not exist (for production environment)
[英]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);
}));
四個簡單的步驟。
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.