【问题标题】:Blade View not rendering xml刀片视图不呈现 xml
【发布时间】:2018-11-09 16:31:19
【问题描述】:

我正在尝试在 Laravel 中创建一个 XML 文件。我正在将数据传递给视图。

但是,XML 没有呈现。

在我看来,这就是我正在做的事情

<?php header('Content-Type: text/xml'); ?>
<?xml version="1.0" encoding="UTF-8"?>
<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">

@foreach ($merchants as $merchant)
<url>
<loc>{{ $merchant->merchant_url_text }}</loc>
</url>
@endforeach

</urlset>

然而,这只是在没有任何结构的情况下多次打印变量 $merchant->merchant_url_text。

对我做错的任何帮助。

【问题讨论】:

  • 您确定不只是您的浏览器呈现这种方式吗?在浏览器中查看页面源代码时看到了什么?
  • @JohnBupit 当我看到页面源代码时,它显示了标签。如果我在同一个浏览器中打开此链接promospro.com/sitemaps01_featured_page.xml,我可以看到正确呈现的 XML。我的内容无法正确呈现的任何原因。另外,如果标签在页面源代码中正确显示,这是否意味着它被认为是一个实际的 xml 文件?
  • 如果您收到“版本”错误,请将 '' 字符串移动到变量并使用{!! $headerString !!}

标签: laravel laravel-5.3 laravel-blade


【解决方案1】:

您没有正确发送标头,这就是您的响应被解释为 text/html 的原因。在 Laravel 中,您可以使用 header 方法将一系列标头添加到响应中,然后再将其发送回用户。 Here's how:

return response($content)
        ->withHeaders([
            'Content-Type' => 'text/xml'
        ]);

【讨论】:

  • 谢谢!有效。我使用 return response()->view('sitemap', compact('merchants'))->header('Content-Type', 'text/xml') 从控制器传递数据;
  • @GauravMehta 我也有同样的问题,请问您可以发送您的控制器和刀片文件代码吗?我正在尝试这种方式,然后显示空白页面,我不知道为什么会这样
【解决方案2】:

通常,blade 是一个模板引擎,用于渲染 html 和其他与前端相关的内容。我不认为您需要在刀片文件中呈现 xml。相反,您可以直接从控制器返回 xml 响应。

请试试这个包。

https://packagist.org/packages/jailtonsc/laravel-response-xml

编辑:

如果尝试使用刀片构建站点地图或类似的东西,请尝试以下代码。

<?php header('Content-Type: text/xml'); ?>
  {{ '<?xml version="1.0"?>' }}
  {{ '<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">' }}

@foreach ($merchants as $merchant)
    {{ '<url>' }}
    {{ "<loc> $merchant->merchant_url_text </loc>" }}
    {{ '</url>' }}
@endforeach

{{ '</urlset>' }}

【讨论】:

  • 我相信 OP 正在尝试构建一个 XML 站点地图,而这个包不适合。
  • 感谢@JohnBupit。我想说同样的话。该软件包可能对生成站点地图没有用处。
  • @GauravMehta 更新了您方案的代码示例。
  • 您可以考虑改用{!! !!}
猜你喜欢
  • 2019-12-15
  • 2012-04-13
  • 2015-08-20
  • 2013-09-27
  • 2016-09-09
  • 2013-08-03
  • 1970-01-01
  • 2015-02-17
  • 1970-01-01
相关资源
最近更新 更多