2014-02-15 59 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()'接受一个字符串而不是文件作为第一个参数。 –