【问题标题】:Import an HTML file from inside a Twig template从 Twig 模板中导入 HTML 文件
【发布时间】:2014-03-16 10:59:00
【问题描述】:

我想从 Twig 模板中导入 HTML 文件。 HTML 文件位于/var/files/5(没有扩展名)。我像这样渲染模板:

$path = $_SERVER['DOCUMENT_ROOT'] . '/../var/files/5';
$content = $this->get('templating')->render('ProConvocationBundle:Default:definitive-view.html.twig', array('path' => $path));

在 Twig 模板中,我像这样导入 HTML 文件:

{% include path %}

但它没有找到路径:无法找到模板“/myDocumentRoot/../app/var/files/5”

我也尝试了几种相对路径,但均未成功。知道如何实现它吗?

【问题讨论】:

  • /var/files/5 和绝对路径还是相对于您的文档根目录的路径?由于您正在使用文档根目录构建路径,因此有点不清楚,但/var/... 也很可能是绝对路径。
  • @thormeier - 这是文档根目录的绝对路径。

标签: php html templates symfony twig


【解决方案1】:

是什么导致了这个异常?

在Twig代码中挖掘了一下之后,似乎是以下导致了这个异常:

Twig 尝试从已知的路径/命名空间加载文件,即包名称(如/var/www/myApplication/src/AcmeBundle/Resources/views)和app 路径为myApplication/app/Resources/views)。无论如何,它不接受绝对路径,因为它总是尝试将已知路径添加到给定文件的开头。

<?php
// Twig/Loader/Filesystem.php

class Twig_Loader_Filesystem {

// ...
protected function findTemplate()
{
    // ...
    foreach ($this->paths[$namespace] as $path) {
        if (is_file($path.'/'.$shortname)) {
            return $this->cache[$name] = $path.'/'.$shortname;
        }
    }

    throw new Twig_Error_Loader(sprintf('Unable to find template "%s" (looked into: %s).', $name, implode(', ', $this->paths[$namespace])));
}

所以基本上不可能通过绝对路径包含文件,就像在您的示例中一样。

如何解决?

你有很多可能性来实现这种行为:

添加模板加载器的路径

查看@Adam Elsodaney 的帖子

移动文件

您可以简单地将文件从app/var/files 移动到app/Resources/views/var/files 并使用路径var/files/5 来包含该文件。这可能不是一个合适的解决方案,因为您想保留这些文件。

写一个 Twig 扩展

您可以编写自己的扩展程序,提供一个名为 include_absolute() 的函数,它只返回 file_get_contents($yourPath)

有关 Twig 扩展的更多信息:http://symfony.com/doc/current/cookbook/templating/twig_extension.html

请注意,您可能需要将 |raw 过滤器添加到 Twig 函数的输出中,因为很多东西都会到处转义。

【讨论】:

  • 感谢您的回答。我终于实现了将原始内容传递给 Twig 模板,而不是尝试从模板内部读取它。但你的选择也不错。
【解决方案2】:

在 Symfony 中,您应该使所有内容都与内核根目录相关,即app 目录。

$uploadedTemplatesDir = $this->get('kernel')->getRootDir() . '/../var/files';

然后将其添加到您的模板加载器中

$this->get('twig.loader')->addPath($uploadedTemplatesDir);

【讨论】:

    猜你喜欢
    • 2014-09-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-07-14
    • 2014-03-13
    • 2012-02-13
    相关资源
    最近更新 更多