[英]Including a non-twig file from twig
我需要在Twig模板中包含文件的内容(在我的资源文件夹中)。
我试过这个没有运气:
{% include 'public/directory/file.ext' %}
这不是Twig的能力吗? (我不想使用Assetic)
版本1.15中的新功能:源功能已添加到Twig 1.15中。 source函数返回模板的内容而不呈现它
如果文件不是有效的树枝模板,Twig会在加载文件时抱怨。 原因是Twig将包含渲染文件而不包含它的内容(在此处找到)。
您可以尝试使用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 #}
希望这可以帮助您包含您的文件。
问候,
马特
您可以使用树枝扩展功能解决此问题。 ( 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>
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.