Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/symfony/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Symfony在模板中包含静态html_Symfony_Templates_Twig - Fatal编程技术网

Symfony在模板中包含静态html

Symfony在模板中包含静态html,symfony,templates,twig,Symfony,Templates,Twig,我刚刚开始学习如何使用Symfony,我相信这是很简单的,但是我对模板引擎有一点问题。我想在Symfony(2.5.6)中的一个小树枝模板中包含一个静态HTML片段。现在,我在resources目录中创建了一个静态子文件夹(这可能会更改,但它肯定不会在view文件夹中)。然而,我无法完成这项工作,我总是会出现找不到模板错误。我发现关于这个主题的文档有点稀疏(请参阅),而且twig文档在这方面也帮不了我。我甚至不确定是否可以使用magic@Bundle表示法,或者是否必须以的形式驻留在视图文件夹中

我刚刚开始学习如何使用Symfony,我相信这是很简单的,但是我对模板引擎有一点问题。我想在Symfony(
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'));        
}
}