Symfony在模板中包含静态html

时间:2014-11-14 12:43:53

标签: symfony templates twig

我刚刚开始学习如何使用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作为其格式。文档中是否有错误?

3 个答案:

答案 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" %}