我需要在Twig模板中包含文件的内容(在我的资源文件夹中)。
我试过这个没有运气:
{% include 'public/directory/file.ext' %}
这不是Twig的能力吗? (我不想使用Assetic)
答案 0 :(得分:13)
1.15版中的新功能:在Twig 1.15中添加了源功能。 source函数返回模板的内容而不呈现它
答案 1 :(得分:3)
答案 2 :(得分:1)
如果文件不是有效的树枝模板,Twig会在加载文件时抱怨。原因是Twig将包含渲染文件而不包含它的内容(找到here)。
您可以尝试使用use
语句,但我认为这也无效。
此外,您使用的语法似乎不正确。当我包含(或使用)另一个树枝模板时,我使用以下语法:
{% use "AcmeWebsiteBundle::include.html.twig" %}
文件include.html.twig
位于src\Acme\WebsiteBundle\Resources\views\include.html.twig
。因此,如果您的文件位于src\Acme\WebsiteBundle\Resources\public\directory\include.ext
,则可以尝试
{% use "AcmeWebsiteBundle::..\public\directory\include.ext" %}
如果这不起作用,您可以将文件移动到views文件夹中。如果无法做到这一点,您可以放入app\Resources\views\
并使用语法:
{% use "::include.ext" %}
如果use语句不起作用,我担心,你可以将文件直接包装到twig模板中。我正在用树枝模板化一些简单的JSON结构。因此,可能有一种方法可以将file.ext
的内容包含在树枝模板中,然后再渲染它。
如果所有这些都失败了,您将必须创建一个Twig扩展,添加一个新标记(类似content
),它将读取文件并在您的树枝模板中输出其内容。
{% content 'public/directory/file.ext' %} {# would put content of the file #}
希望这可以帮助您包含文件。
的问候,
马特
答案 3 :(得分:1)
您可以使用树枝扩展功能解决此问题。 (http://symfony.com/doc/current/cookbook/templating/twig_extension.html)
在Bundle中为Twig扩展名创建一个php文件
<?php
namespace AppBundle\Twig;
use Twig_Extension;
use Twig_SimpleFunction;
class AppExtension extends Twig_Extension
{
public function getFunctions()
{
return array(
new Twig_SimpleFunction('fileGetContents', array($this, 'fileGetContents') ),
);
}
public function fileGetContents($file)
{
return file_get_contents($file);
}
public function getName()
{
return 'app_extension';
}
}
?>
将此代码添加到app / config / services.yml
app.twig_extension:
class: AppBundle\Twig\AppExtension
public: false
tags:
- { name: twig.extension }
现在,您可以将自定义函数用作树枝模板中的任何默认函数
<p>{{ fileGetContents( asset("uploads/my_text_file.txt") ) }}</p>