2014-11-25 81 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