2014-11-25 59 views
1

使用laravel渲染站点地图时出现问题。 生成的XML似乎确定,但是当我尝试从Chrome或Firefox调用的URL,我得到一个错误使用laravel渲染站点地图时出现错误

error on line 2 at column 6: XML declaration allowed only at the start of the document 

事实上该文件的第一行是空的,XML声明第2行开始

这里我的代码:

return Response::view('sitemap.index', ['agences' => $agences])->header('Content-Type', 'application/xml'); 

我想,语法太:

$xml = View::make('sitemap.index', ['agences' => $agences]); 
return Response::make($xml, 200)->header('Content-Type', 'application/xml'); 

这样我可以做

dd($xml->render()); 

并且实现返回的字符串没有空的第一行。 所以我猜测回应::使责怪,但我真的不知道从哪里看

+0

我想你已经在文档的开始时检查了空白吗? – Adrenaxus 2014-11-25 09:40:08

+0

嗨Adrenaxus,我甚至三重检查它..... – elfif 2014-11-25 09:41:10

+0

尝试设置''Content-Type','text/xml'' – Adrenaxus 2014-11-25 09:54:01

回答

1

好吧我要发布我自己的答案因为这是棘手的,它花了我一天,好事是我对laravel的了解略有增加。

所以我有我的XML网站地图开始一个空行,并在浏览器上创建一个错误。 Xml首先使用刀片模板生成。 因为它没有工作,我决定使用RoumenDamianoff/laravel-sitemap

但我有同样的问题。所以最后我决定再次使用SimpleXmlElement自己生成Xml,它不会改变任何内容。

在这一点上,我开始挖掘Laravel内部,看看空线可能来自请求生命周期。

基本上我的网站地图是非常简单的:

$urlset = new SimpleXMLElement('<?xml version="1.0" encoding="UTF-8"?><urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9" xmlns:image="http://www.google.com/schemas/sitemap-image/1.1" /><!--?xml version="1.0" encoding="UTF-8"?-->'); 
datas = MyModel::All(); 
foreach($datas as $index=>$data){ 
// generate sitemap 
} 
$dom = new DomDocument(); 
$dom->loadXML($urlset->asXML()); 
$dom->formatOutput = true; 
//output xml 
$xml = $dom->saveXML(); 
$response = Response::make($xml, 200, ['Content-Type' => 'application/xml']); 

只是为了测试我决定改变我被请求的模型,然后不认为第一个空行生成我的XML。 所以我决定调查模型本身并找到错误。模型文件在php打开标记之前只有一个空行。

删除空行解决了我的问题....

+0

非常感谢这个答案非常有帮助,我在Routes.php中也有同样的空白空间,并且我正在用闭包死机测试twilio。 再次感谢 – 2015-06-24 12:25:44

+0

最有可能是由于一个空白行开头的php文件! 看看[这个问题](http://stackoverflow.com/q/14341815/237739)轻松找到哪个文件! – 2016-11-07 22:38:08