Symfony在模板中包含静态html
我刚刚开始学习如何使用Symfony,我相信这是很简单的,但是我对模板引擎有一点问题。我想在Symfony(Symfony在模板中包含静态html,symfony,templates,twig,Symfony,Templates,Twig,我刚刚开始学习如何使用Symfony,我相信这是很简单的,但是我对模板引擎有一点问题。我想在Symfony(2.5.6)中的一个小树枝模板中包含一个静态HTML片段。现在,我在resources目录中创建了一个静态子文件夹(这可能会更改,但它肯定不会在view文件夹中)。然而,我无法完成这项工作,我总是会出现找不到模板错误。我发现关于这个主题的文档有点稀疏(请参阅),而且twig文档在这方面也帮不了我。我甚至不确定是否可以使用magic@Bundle表示法,或者是否必须以的形式驻留在视图文件夹中
2.5.6
)中的一个小树枝模板中包含一个静态HTML片段。现在,我在resources目录中创建了一个静态子文件夹(这可能会更改,但它肯定不会在view文件夹中)。然而,我无法完成这项工作,我总是会出现找不到模板
错误。我发现关于这个主题的文档有点稀疏(请参阅),而且twig文档在这方面也帮不了我。我甚至不确定是否可以使用magic@Bundle表示法,或者是否必须以的形式驻留在视图文件夹中。include标记中不允许使用/
表示法
我尝试了以下方法(以及一些变体):
我猜symfony无法在include中处理原始html,但我也可以使用没有任何模板标记的php模板,所以问题只是如何在view文件夹外指定位置
我知道这可能会解决我的问题,但我不相信这是无法实现的默认配置
编辑:我只是尝试从同一个目录中包含一个常规模板文件,只指定模板文件的名称(如文档中所述,请参阅上面的链接)。但我仍然收到一个错误,抱怨它希望bundle:section:template.format.engine
作为其格式。文档中是否有错误?请尝试以下操作:
{{ include('FashionMediaBundle:Resources:static:pricing.html') }}
如果你想把这个文件放到另一个目录中,我建议你使用一个(我不知道Twig是否可以包含一个不在资源目录中的文件)。我找到了解决方案
在细枝配置中,可以设置路径并为其指定名称
twig:
[... twig options here ...]
paths:
"%kernel.root_dir%/../[path to static]": static_pages
然后你可以把它们包括在
{% include "@static_pages/pricing.html.twig" %}
看起来海报在我打字时找到了解决方案。我想我会把这个放在这里一会儿
此处讨论了如何创建和使用细枝名称空间:
默认情况下,每个bundle都会获得指向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”加载模板
我不会详细介绍所有细节,但您也可以使用编译器pass()从包本身内部添加其他路径,而无需调整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'));
}
}
如果您的bundle被称为FashionMediaBundle
,则删除bundle部分,在没有它的情况下调用twig命名空间路径,如下所示:@FashionMedia
@xurshid29不,不是,但您必须忽略@
。我有另一个模板的工作测试用例,它的工作原理类似于FashionMediaBundle:Static:include.html.php
,但不适用于FashionMedia:Static:include.html.php
不,它不是,但是:)啊,我明白了。同样适用于视图目录中的资源。结果仍然相同。您的文件是否位于FashionMediaBundle/resources/views/static/pricing.html
路径?不,如上所述,它不在视图目录中。这是实际的复杂性。我有一个testcase{{include('FashionMediaBundle:Static:include.html.php')}
,它在views目录中运行一个文件,但是1)被呈现为twig而不是php,2)在他们包含的文档中没有bundle和section,但是我不能这样做……对不起,我不知道你是否可以使用views``目录中没有的文件。如果您想将文件放在除
views`以外的其他目录中,我仍然建议您使用符号链接。再次感谢我找到了解决方案,请参阅我的答案
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'));
}
}