2013-04-11 55 views
1

我正在使用laravel與控制器佈局。但是我的應用程序中有一些不想使用佈局的部分(例如,在將數據返回到支付網關請求時,我發送XML數據)。我只想將數據傳遞給我的視圖並單獨渲染,而不需要佈局。Laravel - 如何不使用佈局

我該怎麼做?我一直在嘗試一些方法,但沒有爲此工作。我可以成功地更改要呈現的佈局,但是我無法設置呈現沒有佈局的視圖。

謝謝!

編輯:讓我來解釋它更好

我的默認佈局在Base_Controller設置。然後,我所有的控制器擴展它,但其中一個我不需要佈局,正如我上面告訴的。也許我需要取消默認佈局或類似的東西,我不確定。

回答

2

您可以簡單地從控制器操作中返回一些內容以繞過佈局。

function get_xml($id) { 
    $user = User::find($id); 
    return View::make('user.xml', $user); 
} 
+0

這沒有奏效。什麼都不會發送到瀏覽器。 =/ – Phius 2013-04-11 22:46:57

+1

你有views/user/xml.php(或blade.php)嗎?至少你知道它絕對繞過了一些東西! :D – 2013-04-11 22:52:11

+1

是的,我有。但是你的問題在我心中點燃了一絲火花,我發現什麼是錯的。我正在使用具有@section()和@endsection的視圖文件進行測試。刪除它們後,它終於起作用了:D謝謝你! – Phius 2013-04-11 23:11:04

2

在您的控制器函數上,您可以簡單地返回一個字符串,該字符串將按原樣返回到瀏覽器。或者,您可以製作一個Laravel\Response對象,這將允許您微調網站的輸出,而不僅僅是返回一個字符串。

Response類有一些技巧,它沒有在文檔中提到:default return,JSON,forced download

您對第一個更感興趣,它將允許您將響應的內容類型正確設置爲application/xml。除此之外,您還可以使用使用XML的視圖!像使用View::make一樣生成視圖,但不是直接返回它,而是將其存儲在一個變量中。要呈現它,請撥打render() - 它會返回輸出。

+0

嗯我會試試這個! – Phius 2013-04-11 22:47:24

+0

Phill的答案奏效。謝謝! – Phius 2013-04-11 23:11:45

0

一個簡單的方法....

假設有一個main佈局

<body> 

     @yield('content') 

</body> 

content將是其中視圖將被插入。

現在,如果你想使用的佈局,作出這樣的視圖頁面

@layout('main') 

@section('content') 
blah blah your content 
@endsection 

如果你不希望使用的佈局,省略上面的代碼。

控制器,代碼將兩個文件相同。

return View::make('index'); 
+1

OP正在使用控制器佈局,而不是刀片佈局;所以這不適用。 – 2013-04-11 21:14:50

+1

@PhillSparks這是自動化的方式。否則,只需要添加'$ this-> layout ='''並且佈局結束了。 – itachi 2013-04-11 21:16:27

+0

是的,儘管您仍然需要在該點返回響應。 – 2013-04-11 22:07:44