我刚刚开始学习如何使用Symfony,我认为这是直截了当但我对模板引擎有一点问题。我想在Symfony(2.5.6
)的一个twig模板中包含一个静态HTML片段。现在我在资源目录中创建了一个静态子文件夹(这可能会改变,但肯定不会在视图文件夹中)。但是,我无法完成此操作,我总是会遇到unable to find template
错误。我发现关于这个主题的文档有点稀疏(参见http://symfony.com/doc/current/book/templating.html#including-other-templates),枝条文档也无法帮助我解决这个问题。我甚至不确定我是否可以使用魔术@Bundle符号,或者我是否必须驻留在视图文件夹中,因为../
符号在include标记中是不允许的。
我尝试了以下(以及一些变体):
{{ include('@FashionMediaBundle/Resources/static/pricing.html') }}
我猜symfony无法处理include中的原始html,但我可以使用没有任何模板标签的php模板,所以问题是如何指定视图文件夹之外的位置。
我知道http://github.com/kgilden/KGStaticBundle这可能会解决我的问题,但我无法相信默认配置无法实现。
编辑:我只是尝试在同一目录中包含一个常规模板文件,只指定模板文件的名称(如文档中所述,请参阅上面的链接)。我仍然得到一个错误,抱怨它希望bundle:section:template.format.engine
作为其格式。文档中是否有错误?
答案 0 :(得分:4)
看起来海报在我打字时找到了解决方案。我想我会把它留在这里一点点。
这里讨论创建和使用twig名称空间:http://symfony.com/doc/current/cookbook/templating/namespaced_paths.html
默认情况下,每个捆绑包都会获得指向views目录的自己的命名空间。您可以通过调整app / config.yml
来添加其他目录twig:
debug: %kernel.debug%
strict_variables: %kernel.debug%
paths:
"%kernel.root_dir%/../../cerad2/src/Cerad/Bundle/FashionMediaBundle/Resources/static": FashionMedia
使用以下内容加载模板:' @ FashionMedia / pricing.html'
我不会详细介绍所有细节,但您也可以使用编译器传递(http://symfony.com/doc/current/cookbook/service_container/compiler_passes.html)从包内部添加其他路径,而无需调整config.yml:
class Pass implements CompilerPassInterface
{
public function process(ContainerBuilder $container)
{
$bundleDirAction = $container->getParameter('cerad_api01__bundle_dir') . '/Action';
$twigFilesystemLoaderDefinition = $container->getDefinition('twig.loader.filesystem');
$twigFilesystemLoaderDefinition->addMethodCall('addPath', array($bundleDirAction, 'CeradApi01'));
}
}
答案 1 :(得分:2)
试试这个:
{{ include('FashionMediaBundle:Resources:static:pricing.html') }}
如果你想把这个文件放在另一个目录中,我建议你使用symbolic link(我不知道Twig是否可以包含一个不在Resources
目录中的文件)。 / p>
答案 2 :(得分:1)
我找到了解决方案!
在树枝配置中,您可以设置路径并为其指定名称。
twig:
[... twig options here ...]
paths:
"%kernel.root_dir%/../[path to static]": static_pages
然后你可以将它们包含在
中 {% include "@static_pages/pricing.html.twig" %}