2014-02-15 60 views
1

我想使用symfony中未開發的網站的樹枝的一些內置symfony2擴展(例如:humanize,yaml_dump),但使用樹枝引擎。我可以這樣做嗎?如何在沒有symfony2的情況下使用symfony2樹枝擴展

+2

你檢查過枝(不symfony的)手冊?它顯示瞭如何添加擴展。 http://twig.sensiolabs.org/doc/api.html#using-extensions – Cerad

+0

是的,但我不知道如何訪問symfony2的內置擴展 – user2268997

回答

5

symfony/twig-bridge包提供了symfony特有的樹枝擴展。

這些包括提供yaml_dump過濾器的YamlExtension和提供humanize過濾器的FormExtension

擴展名可以在Extension文件夾中找到。

我強烈建議您通過composer安裝軟件包以自動獲取軟件包的依賴關係。

composer require symfony/twig-bridge:~2.3 

其他作曲家會自動爲您自動註冊自動加載器中的類(vendor/autoload.php)。

現在您只需按照documentation中所述將擴展添加到樹枝。

$twig->addExtension(new \Symfony\Bridge\Twig\Extension\YamlExtension()); 
// ... 
+0

謝謝。還有可能聽起來很渺茫:是否有可能配置樹枝以便您不必每次都像內置擴展一樣加載擴展? – user2268997

1

一個完整的例子,有一個擴展類和快速擴展(新過濾器):

<?php 

require_once("vendor/autoload.php"); 

$loader = new Twig_Loader_String(); 
$twig = new Twig_Environment($loader); 

// here we add the extension class (taken from @nifr answer) 
$twig->addExtension(new \Symfony\Bridge\Twig\Extension\YamlExtension()); 

// here we add a new filter quickly 
$filter = new Twig_SimpleFilter('paragraph', function ($argument) { 
    return "<p>{$argument}</p>"; 
}, array('pre_escape' => 'html', 'is_safe' => array('html'))); 
$twig->addFilter($filter); 

// demo 
echo $twig->render('{{ "hello" | paragraph }}'); 
+0

嘿,這裏用twig_loader_string是怎麼用的?我讀了文檔,但是無法確定。 – user2268997

+0

它被用於''twig-> render()'接受一個字符串而不是文件作爲第一個參數。 –